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 :

[Image][Débutant]Compression d'images JPG en Java ?


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9
    Par défaut [Image][Débutant]Compression d'images JPG en Java ?
    Bonjour à tous et à toutes,

    je suis un jeune et heureux papa, et les photos numériques fusent et gonflent mon disque dur dangereusement. J'ai un appareil de 5Millions de pixels, et sur l'année 2004, j'ai pris + de 650 photos, pour un total de 1,33Go d'espace disque (entre 2 et 3Mo / photo). Or l'intérêt de conserver une photo en 5 millions de pixels concerne surtout l'éventualité de la développer en grand format (20x30 ou +). Et seuls 5% de ces photos méritent d'être agrandies, voire même développées. Cependant, je désire les archiver quand même. Je pense avoir trouvé un bon compromis en compressant ces photos avec dosage pour avoir un bon rapport entre espace disque et qualité qui me permette de les développer dans le futur en format minimal 10x13. Pour celà, je désirais créer un petit programme java qui parserait mon répertoire contenant mes photos, et pour chacune d'entre elles, appliquer un traitement (comme sous un logiciel type photoshop) pour réduire leur taille (de 3Mo à 500Ko) :
    - passer la résolution de 2592x1944 à 1024x768
    - réduire la qualité de l'image en jouant sur le taux de compression appelé "JPEG quality factor" dans la plupart des logiciels de retouche (échelle de 1 à 12 chez photoshop).
    J'ai découvert récemment que le JDK 1.4 fournissait déjà des objets (package javax.imageio.ImageIO) permettant de jouer avec des images. Je pense en outre avoir trouvé le bout de code permettant de réduire la résolution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    double scaleValue = 0.5;
    String nom = "test";
    BufferedImage photo = ImageIO.read(new File(nom + ".jpg"));
    AffineTransform tx = new AffineTransform();
    tx.scale(scaleValue, scaleValue);
    AffineTransformOp op = new AffineTransformOp(tx,
                    AffineTransformOp.TYPE_BILINEAR);
    BufferedImage photo_2 = new BufferedImage( 
                    (int) (photo.getWidth() * scaleValue),
                    (int) (photo.getHeight() * scaleValue),
                    photo.getType());
    photo_2 = op.filter(photo, photo_2);
    boolean vrai = ImageIO.write(photo_2 , "jpg", new File(nom + "_2.jpg"));
    Qu'en pensez-vous ?
    Quelqu'un aurait-il une idée pour jouer sur ce fameux "JPEG quality factor" ??

    Par avance merci beaucoup de vos éventuelles réponses.

    Cordialement

  2. #2
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 817
    Par défaut
    Salut,

    Y'a quelque chose comme ça à faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    FileOutputStream out = new FileOutputStream("c:/zzz.jpg");
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bImage);
    param.setQuality(0.9f, false); // 90% quality JPEG
    encoder.setJPEGEncodeParam(param);
    encoder.encode(bImage);
    out.close();
    la bImage étant une BufferedImage,

    et avec un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import com.sun.image.codec.jpeg.JPEGCodec;
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 7
    Par défaut
    salut c'est un bout de code que j'ai fait pour reduire la taille de mes photos pour les mettre sur le net et je pense qu'il repond a ton probleme.

    En sachant que reduire la taille d'une photo par 2 reduit son poids par 4

    tu le compiles et tu l'executes et ca marche (normalement)

    si tu arrives pas a la faire marché envoi moi un msg privé

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    import java.awt.geom.AffineTransform;
    import java.awt.image.AffineTransformOp;
    import java.awt.image.BufferedImage;
    import java.io.File;
     
    import javax.imageio.ImageIO;
     
    public class Red_ima 
    {
    	// dossier dans lequel seront stockées les images
    	private String nomdoss="./Pics/";
    	// nom du dossier ou se trouve les photos
    	private String dossorig="./images/";
    	private File [] dir;
    	private File entree, nom, sortie;
    	// echelle <0 reduction
    	// si on met une echelle >0 ca foire
    	private double echelle=0.5;
     
     
    	public Red_ima()
    	{
    		nom=new File(nomdoss);
    		nom.mkdir();
    		entree= new File(dossorig);
    		dir = entree.listFiles();
    	}
     
    	public void trait_image ()
    	{
    		for (int i=0; i<dir.length;i++)
    		{
    			try
    			{
    				BufferedImage bi=ImageIO.read(dir[i]);
    				System.out.println("Traitement de : " +dir[i]);
    				String fic = nomdoss+"image"+i+".jpeg";
    				sortie=new File(fic);
    				BufferedImage biNew = new BufferedImage((int) (bi.getWidth() * echelle),(int) (bi.getHeight() * echelle),
    		                bi.getType());
    				AffineTransform tx = new AffineTransform();
    		        tx.scale(0.5, 0.5);
    		        AffineTransformOp op = new AffineTransformOp(tx,
    		                AffineTransformOp.TYPE_BILINEAR);
    		        bi=op.filter(bi, biNew);
    				ImageIO.write(bi, "JPG", sortie);
    			}
    			catch (Exception e)
    			{
    				System.out.println("ERROR -- le fichier" + dir[i] + " n'est pas une image");
    			}
    		}
    	}
     
    	public static void main (String [] args)
    	{
    		Red_ima r = new Red_ima();
    		r.trait_image();
    	}
    }
    ciao

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9
    Par défaut
    Merci beaucoup à tous pour vos contributions et vos aides détaillées.
    Je vais les tester le plus tôt possible.
    Merci encore de votre patience.
    J'espère pouvoir vous rendre la pareille dans le futur.
    Bonne continuation.

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

Discussions similaires

  1. Compression d'image JPG/BMP
    Par 0x44-0x43-0x53-0x43 dans le forum Langage
    Réponses: 2
    Dernier message: 31/08/2010, 15h27
  2. compression d'image avec java
    Par ghost10 dans le forum Débuter
    Réponses: 1
    Dernier message: 02/04/2010, 11h36
  3. [Débutant]Modifier une image jpg
    Par kenny49 dans le forum Graphisme
    Réponses: 2
    Dernier message: 20/11/2007, 15h42
  4. Compresser une image jpg en VBA(Ex.: De 500k à 50k)
    Par nonaparus dans le forum VBA Access
    Réponses: 4
    Dernier message: 09/11/2006, 15h49
  5. Compression d'images en JAVA
    Par Battosaiii dans le forum Langage
    Réponses: 4
    Dernier message: 20/06/2006, 23h41

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