IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Graphisme Java Discussion :

sauvegarder image sans compression


Sujet :

Graphisme Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Par défaut sauvegarder image sans compression
    bonjour

    Je réalise actuellement un petit prog de compression d'image et je cherche à sauvegarder mon image compressée dans un fichier.
    mais lors de cette sauvegarde je ne cherche pas à la recompresser !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    public void enregistreSous(){
     
     JFileChooser fc = new JFileChooser();
     if (fc.showSaveDialog(fen) == JFileChooser.APPROVE_OPTION) { 
    	File file = fc.getSelectedFile(); 
    	try{
               FileImageOutputStream bos = new FileImageOutputStream(file);
        	   Iterator iter = ImageIO.getImageWritersByFormatName("jpg");
        	   if (iter.hasNext()) {
               	ImageWriter writer = (ImageWriter) iter.next();
                    ImageWriteParam iwp = writer.getDefaultWriteParam();
                	iwp.setCompressionMode(ImageWriteParam.MODE_DISABLED);
                	writer.setOutput(bos);
                    IIOImage image = new IIOImage("mon image compressée", null, null);
     
                    writer.write(null, image, iwp);
               }
        	}
            catch(Exception e){
                  e.printStackTrace();
            }
      }
    }
    le problème est que MODE_DISABLED n'est pas accepté lors de l'exécution on me dit que jpg ne peux être disabled.(idem pour gif png ...)
    mais alors pourquoi MODE_DISABLED existe?

    J'ai aussi essayé de passer directement par un buffer en transformant ma BufferedImage en byte[] mais cela ne fonctionne pas l'image n'est pas reconnue à l'ouverture

    A l'aide

  2. #2
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Je n'ai pas la réponse à ta question, mais je me demandais pourquoi ne pas la sauvegarder en tiff qui lui n'est pas compressé et qd même assez courant.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Par défaut
    je viens d'essayer mais apparemment tiff n'est pas reconnu par java....
    j'ai seulement le choix entre jpg jpeg gif bmp wbmp.
    gif jpg me réduit le poids de l'image (normal)
    bmp me multiplie le poids par 200...

    je pense qu'en fait il faut faire une classe qui hérite de jpg et redefinir les fonctions de compression...
    mais bon là je ne voit pas comment faire

    sinon vu que je peux récupérer ma bufferedImage en byte[] il faut trouver quoi lui rajouter comme "tag" pour que ce tableau de byte brut puisse être inclus dans un fichier qui pourra être interprété comme une image lors d'un éventuel chargement par les méthodes classiques ImageIO.read(....)


    Bon c'est la galère mais en tout cas merci Tommy de ta participation

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    JPEG fait de la compression destructive.
    Si tu veux sauvegarder une image sans compression du tout, passe par du BMP. Ou si tu veux de la compression non destructive, utilise du PNG.
    quand tu dis que tu ne veux pas de compression, tu refuses toute compression ? Ou uniquement la compression destructive ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Par défaut
    à la base je charge une BufferedImage en jpg gif ou autre
    mon prog compresse cette image par la décomposition en ondelette (JPEG2000)
    et ensuite je veux la sauvegarder tel quel et surtout pas lui appliquer une compression de plus lors de ImageIO.write(...)

    or apparemment imageIO.write(..)oblige à effectuer une compression destructive ou non ce qui modifie le poids de la BufferedImage. (au départ je pensais que mode_disabled faisait sauter la compression lors de l'ecriture ne laissant que le tag jpg ou gif ou png sur les données ecrites)


    je pense que le seul moyen est de transformer ma BufferedImage en byte[] qui va servir de buffer et passer ces données vers un fichier Fileout par un BufferedOutputStream mais un autre problème apparait :
    il faut que je rajoute un TAG au tableau byte[] pour que mon fichier Fileout soit reconnu par la suite comme une image ....

  6. #6
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Il faudrait que tu écrive toi-même les imageWrite et imageRead, puisque finalement tu définis un nouveau format d'image. Et à toi de gérer un header minimal pour les caractéristiques classiques d'une image (taille, résolution...).

    Bien évidemment c'est pas trivial... Tu pourrais t'inspirer de ca.

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par <-roby-> Voir le message
    à la base je charge une BufferedImage en jpg gif ou autre
    mon prog compresse cette image par la décomposition en ondelette (JPEG2000)
    et ensuite je veux la sauvegarder tel quel et surtout pas lui appliquer une compression de plus lors de ImageIO.write(...)
    Ok, donc c'est bien à toi d'écrire tout le fichier, avec les header, palette et tout le tralala au format JPEG2000. Ce n'est pas possible de passer par l'API standard.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Par défaut
    merci à tous je vais faire le plug in du lien fourni par tommy

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Zedgraph sauvegarde d'image sans confirmation
    Par LeBzul dans le forum C#
    Réponses: 4
    Dernier message: 09/05/2009, 15h34
  2. Afficher une image sans URL dans un forum
    Par Vanesse dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 01/03/2006, 17h55
  3. [J2ME][MIDlet]rafraichir une image sans toucher au form?
    Par noobiewan kenobi dans le forum Java ME
    Réponses: 1
    Dernier message: 05/09/2005, 09h54
  4. [Image][Débutant]Compression d'images JPG en Java ?
    Par joe.satriani dans le forum 2D
    Réponses: 3
    Dernier message: 30/01/2005, 16h34
  5. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo