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 :

compression jpeg en java


Sujet :

2D Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 8
    Par défaut compression jpeg en java
    Bonjour a tous,
    je souhaite créer une image jpeg et ensuite récupérer les valeurs exactes de pixels sauvegardées dans cette image.
    malheureusement après avoir j'effectué la compression l'image restituée n'est plus tout à fait la même...
    voici un petit bout de code pour illustrer mon propos:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            BufferedImage image = new BufferedImage(50, 50, BufferedImage.TYPE_INT_RGB);
            for (int col = 0; col < image.getWidth(); col++) {
                for (int row = 0; row < image.getHeight(); row++) {
                    image.setRGB(col, row, 50);
                }
            }
            image.setRGB(1, 1, 10);
            ImageIO.write(image, "jpg", new File("sample.jpg"));
            BufferedImage jpgImage = ImageIO.read(new File("sample.jpg"));
            System.out.println("buffered image->" + new Color(image.getRGB(1, 1)));
            System.out.println("jpeg image->" + new Color(jpgImage.getRGB(1, 1)));
    en sortie j'obtiens ceci:
    buffered image->java.awt.Color[r=0,g=0,b=10]
    jpeg image->java.awt.Color[r=0,g=0,b=50]

    Tous les pixels ont un rgb de 50 sauf le pixel(1,1) qui a un rgb a 10, dans l'image jpeg générée le pixel est passé à 50...

    Ma question est: est-il possible de récupérer la valeur d'origine qui était de 10?
    Toute aide sera vraiment la bienvenue!

    PS : je souhaite utiliser le format jpeg car le png est trop volumneux dans mon cas..

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 899
    Billets dans le blog
    54
    Par défaut
    Le JPEG utilise un algorithme destructeur pour sa compression. Donc le contenu de ton image sera modifie.
    D'autres question idiotes ?

    Essaie de voir avec d'autres formats non-destructeurs (TIFF, etc.) pour voir s'ils compressent mieux ou pire que le PNG.

    http://en.wikipedia.org/wiki/Lossles...ssion#Graphics
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 8
    Par défaut
    En fait jpeg était le seul format qui me proposait une compression suffisante comparé à PNG.
    En fait j'espérais qu'il eut été été possible de "verrouiller" la liste des couleurs utilisées lors de la compression (ColorModel, ColorSpace). désolé pour la question idiote...

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 899
    Billets dans le blog
    54
    Par défaut
    Le JPEG est destiné avant tout au stockage de photos numériques en utilisant un algorithme destructeur basé sur la perception de l'oeil humain. Il n'est pas destiné au stockage d'image dont le contenu doit demeurer intact.

    La page en de wikipedia sur le JPEG indique cependant qu'il existe un mode sans perte mais que ce dernier est peu voir pas utilisé. Il faut donc aller foiller dans les classes de configuration du codec JPEG de ImageIO pour voir si ce support existe avec les classes de base du JRE.

    Citation Envoyé par http://en.wikipedia.org/wiki/JPEG#JPEG_compression
    The compression method is usually lossy, meaning that some original image information is lost and cannot be restored, possibly affecting image quality. There is an optional lossless mode defined in the JPEG standard; however, that mode is not widely supported in products.
    En mode destructeur, même en meilleure qualité/sans compression, des artefacts apparaissent à cause de l'algorithme utilisé (http://en.wikipedia.org/wiki/JPEG#Ef...EG_compression).
    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

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Citation Envoyé par bouye Voir le message
    Il faut donc aller foiller dans les classes de configuration du codec JPEG de ImageIO pour voir si ce support existe avec les classes de base du JRE.
    Tout en précisant bien qu'utiliser ces classes est une mauvaise idée en soit vu qu'elles ne font pas partie de la spec (l'API) java, et donc peuvent être supprimées/renomées/changées d'emplacement à tout moment. C'est ce qui est arrivé en java 6 par exemple avec toutes les classes du package com.sun.image.codec.jpeg qui se sont fait la malle.

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 899
    Billets dans le blog
    54
    Par défaut
    Je pensais plutot aux classes publiques du codec ImageIO qui permettent de specifier des options propres a chaque format. Dans notre cas, javax.imageio.plugins.jpeg.JPEGImageWriteParam


    D'ailleurs :

    Citation Envoyé par http://download.oracle.com/javase/6/docs/api/javax/imageio/plugins/jpeg/JPEGImageWriteParam.html#isCompressionLossless()
    public boolean isCompressionLossless()

    Returns false since the JPEG plug-in only supports lossy compression.
    Donc faudra voir avec des libs externes pour un support JPEG lossless en Java plutot que de passer par le plugin officiel.
    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

Discussions similaires

  1. Compression XML en Java
    Par onlytoine dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 06/09/2007, 11h41
  2. Quantifier la qualité d'une image après compression JPEG
    Par louitos dans le forum Traitement d'images
    Réponses: 5
    Dernier message: 06/07/2007, 09h42
  3. Compression, JPEG, Théorie
    Par ronan99999 dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 28/01/2007, 22h15
  4. compression jpeg & DCT
    Par meera dans le forum C++
    Réponses: 7
    Dernier message: 03/07/2006, 15h02
  5. Compression Jpeg avec OpenIL
    Par Sebsheep dans le forum C
    Réponses: 2
    Dernier message: 01/07/2006, 08h55

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