Bonjour,
J'aimerais savoir si quelqu'un connait un moyen (préexistant) pour créer des miniature d'images de type Jpeg.
Merci d'avance ^^
Bonjour,
J'aimerais savoir si quelqu'un connait un moyen (préexistant) pour créer des miniature d'images de type Jpeg.
Merci d'avance ^^
comme ça par exemple
et te voila avec une miniature d'une photo dans un label
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 JLabel photoPreview = new JLabel; File file = new File("toto.jpg"); java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit(); Image img = toolkit.getImage(file.getPath()); ImageIcon ic = new ImageIcon(img.getScaledInstance(130, 160, Image.SCALE_AREA_AVERAGING)); photoPreview.setIcon(ic); repaint(); pack();
Ensuite pour aller plus loin il te faudra manipuler une BufferedImage afin d'obtenir une réduction uniforme de la taille de l'image et non une taille fixée, mais bon c'est une première approche
Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.
Il ne faut JAMAIS utiliser getScaledInstance(). JAMAIS. Cette methode est 20 a 30 fois plus lente que l'autre solution :
La methode Graphics.drawImage() permet de redimensionner l'image grace a la carte graphique. Pour avoir un plus joli resultat tu peux rajouter cela avant le drawImage() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Image imageAReduire = ...; // ... BufferedImage image = new BufferedImage(BufferedImage.TYPE_INT_ARGB, imageAReduire.getWidth(null), imageAReduire.getHeight(null)); Graphics2D g2 = image.createGraphics(); g2.drawImage(imageAReduire, 0, 0, nouvelleLargeur, nouvelleHauteur, null); g2.dispose();
Le resultat ne sera agreable que si ta version reduite de l'image a des dimensions proches de celles d'origine divisees par deux. Si tu reduis plus il faut utiliser une approche proche de la technique du mip mapping :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
Et non, cette solution n'est pas vraiment plus lente que celle en une seule etape
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 static BufferedImage createThumbnail(BufferedImage image, int requestedThumbSize) { float ratio = (float) image.getWidth() / (float) image.getHeight(); int width = image.getWidth(); BufferedImage thumb = image; do { width /= 2; if (width < requestedThumbSize) { width = requestedThumbSize; } BufferedImage temp = new BufferedImage(width, (int) (width / ratio), BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = temp.createGraphics(); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2.drawImage(thumb, 0, 0, temp.getWidth(), temp.getHeight(), null); g2.dispose(); thumb = temp; } while (width != requestedThumbSize); return thumb; }
Dans ce cas petite question, qu'en est-il de la méthode scale d'AffineTransform (même problèmes de vitesse?)
Quoi qu'il en soit merci bien, je mourrais moins con (enfin c'est un euphémisme ) ce soir
Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.
Merci bien
Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.
Bonjour,
J'ai essayé la façon présentée par gfx mais j'ai un problème de type d'image.
J'ai essayé plusieurs formats et j'ai chaque fois la même exception qui revient:Voici le code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Unknown image type -1
J'ai vérifié, toolkit.getImage(url) ne renvoit pas null
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 URL url = getClass().getResource("applic/ressources/Type1.gif"); java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit(); Image imageAReduire = toolkit.getImage(url); BufferedImage image = new BufferedImage(BufferedImage.TYPE_INT_RGB, imageAReduire.getWidth(null), imageAReduire.getHeight(null)); Graphics2D g2 = image.createGraphics(); g2.drawImage(imageAReduire, 0, 0, this.getWidth(),this.getHeight(), null); g2.dispose();
Qqun voit le problème?
Merci d'avance
Gfx > Pour récupérer une image à partir d'un lien imgPath, je fais actuellement ça :
Cela me semble, d'après mes premiers tests sous JProbe être un peu plus rapide que de faire comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Image imgOld = new ImageIcon(imgPath).getImage();
Saurais-tu ce qu'il en est réellement ? Car les résultats fournis par JProbe varient pas mal d'une execution à l'autre...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 imageFile = new File(imagePath); BufferedImage imgOld = ImageIO.read(imageFile);
Merci ^^
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager