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

2D Java Discussion :

[JPEG]Meilleur qualité


Sujet :

2D Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 47
    Par défaut [JPEG]Meilleur qualité
    Bonjour, voila mon problème:

    Je créer une image de la manière suivante qui se compose d'un bete rectangle de couleur (qui sert de couleur de fond de l'image en faite), et d'un texte placé dessus.

    Le truc, c'est que le texte "bave", c'est otut pixélisé et moche. Mes images ne font que 3ko.

    Je voudrais donc savoir coment faire pour obtenir une image de meilleur qualitée??

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 909
    Billets dans le blog
    54
    Par défaut
    Serait'il possible de la voir le code cette maniere suivante en question ? Paske la tu ne nous indiques pas comment tu sauves l'image, juste comment tu la dessines.

    Ensuite JPEG est une compression destructive, meme si tu met en qualite max (c'est possible de configurer la compression via l'API) tu pourras avoir ce genre de pb. Pour avoir des images de taille (relativement) correcte et sans degradation utilise plutot PNG.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 47
    Par défaut
    j'enregistre l'image de la facon siuvante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    OutputStream out;
     
    				out = new BufferedOutputStream(new FileOutputStream("Images/" + nomId[0] + " - " + nomId[1] + ".jpg"));
    				JPEGImageEncoder encodeur = JPEGCodec.createJPEGEncoder(out);
    				encodeur.encode(img.obtenirImage());
    je vais essayer en png alors, merci

  4. #4
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Par défaut
    Quand tu dessines ton image...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2d = bi.createGraphics();
     
    //Qualité des couleurs et antialiasing
    RenderingHints rh = g2d.getRenderingHints();
    rh.put(RenderingHints.KEY_ANTIALIASING,
    	RenderingHints.VALUE_ANTIALIAS_ON);
    rh.put(RenderingHints.KEY_COLOR_RENDERING,
    	RenderingHints.VALUE_COLOR_RENDER_QUALITY);
    rh.put(RenderingHints.KEY_TEXT_ANTIALIASING,
    	RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    g2d.setRenderingHints(rh);
    Après, c'est vrai que l'enregistrement en JPEG dégrade, mais si tu mets 100% ça dégrade pas (mais ça fera un fichier + gros).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 47
    Par défaut
    Ok, mais on fait comment pour mettre 100%?? parce que ca change pas vraiment...

    et en fait, j'ai pas le choix que d'avoir du jpeg... ca m'est imposé...

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 909
    Billets dans le blog
    54
    Par défaut
    Avec les options par défaut la qualité doit être d'environ 75% je crois (à moins que ce ne soit 80%) ce qui est largement suffisant pour du JPEG en usage normal. L'usage normal pour du JPEG étant la photographie numérique et les images réalistes (c'est ce pourquoi le JPEG a été créé) pas pour les graphes et les figures qui doivent être nets et précis.

    Si tu ne peux pas faire autrement que d'utiliser du JPEG (ex : contraite forte du projet) tu peux augmenter la qualité en utilisant ImageIO. La classe javax.imageio.ImageWriteParam et la méthode setCompressionQuality(float value) (value entre 0 et 1) en particulier.

    Sinon pour faire du PNG c'est aussi simple que ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    import javax.imageio.*;
     
    BufferedImage bi;
    File f = new File("c:\images\myimage.png");
    ImageIO.write(im, "png", f);
    Remplacer 'png" par "jpg" pour sauvegarder en JPEG avec la compression par dégaut.

    Pour faire du JPEG tout en mettant la compression à un certains niveau il faudra plutot faire :

    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
     
    import javax.imageio.*;
     
    BufferedImage bi;
    Iterator writers = ImageIO.getImageWritersByFormatName("jpeg");
    // ou
    //Iterator writers = ImageIO.getImageWritersBySuffix("jpg");
    if (writers.hasNext()) {
      ImageWriter writer = (ImageWriter)writers.next();
      ImageWriteParam param = writer.getDetaultWriteParam();
      param.setCompressionQuality(0.95);
      File f = new File("c:\images\myimage.png");
      ImageOutputStream ios = ImageIO.createImageOutputStream(f);
      writer.setOutput(ios);
      IIOImage iioImage = new IIOImage(fbi, null, null);
      writer.write(null, iioImage, param);
      writer.dispose();
      writer.close();
    }
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Tu utilise une API et tu ne lis pas sa Javadoc : Mauvaise habitude

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     JPEGEncodeParam  paramJPGE = encodeur.getJPEGEncodeParam();
     /* pour le paramètre forceBaseline à toi de chercher la doc.
         Je ne suis pas un spécialiste de JPEG.
     */
     boolean forceBaseline  = true;
     paramJPGE.setQuality(1.0, forceBaseline);
    setQuality

    EDIT: ou tu utilises la solution de bouye qui me semble plus simple que la mienne

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 47
    Par défaut
    Citation Envoyé par jowo
    Tu utilise une API et tu ne lis pas sa Javadoc : Mauvaise habitude
    désolé désolé... je suis un jeune programmeur.. le pire c'est que j'ai fouillé la doc mais sans trouver..

    j'ai demander a un collegue qui a trouver ce que tu viens justement de me montrer!!

    Bon bin maintenant ca va mieux, c'est bien plus joli.

    Merci de votre aide

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

Discussions similaires

  1. [TImage]Problème affichage jpeg avec qualité >90
    Par Bourak dans le forum Composants VCL
    Réponses: 0
    Dernier message: 18/10/2010, 11h33
  2. Mandriva Linux Spring RC2 : une meilleure qualité ?
    Par troumad dans le forum Mandriva / Mageia
    Réponses: 8
    Dernier message: 05/07/2010, 18h31
  3. [PC portable] Portable meilleur Qualité/Prix
    Par rad_hass dans le forum Ordinateurs
    Réponses: 15
    Dernier message: 29/01/2009, 08h13

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