J'utilisais la librairie Java Grahpics2D pour faire les redimensionnements :
Code:1.
2.
3.
4.
5.
6.
7.BufferedImage resizedImage = new BufferedImage(width, height, type); Graphics2D g = resizedImage.createGraphics(); g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR); g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.drawImage(originalImage, 0, 0, width, height, null); g.dispose();
J'ai eu beau tester toutes sortes de réglages de rendus, j'ai l'impression que cette librairie prend un pixel à intervalle régulière au lieu de faire une sorte de moyenne des pixels aux alentours.
Après quelques recherches, j'ai trouvé la librairie open-source imgsclar (GitHub/Maven) qui donne un bien meilleur résultat et plus facilement :
Code:1.BufferedImage resizedImage = Scalr.resize(originalImage, Scalr.Method.ULTRA_QUALITY, width,
height);
Résultats :
Avant:

Après:

Avant:

Après:

Mais cette nouvelle librairie a ses avantages et inconvénients.
Avantages :
- Meilleur rendu
- Fichier final plus léger car la compression marche mieux (gain entre 20 et 30%)
Inconvénients :
- Temps de traitement plus long (5-10s avec libscalr en "ULTRA_QUALITY" contre 1-2s pour Graphics2D)
Pour les grosses images, ce n'est pas trop grave. L'inconvénient ne posera pas de problème pour un simple blog.
Vu que ce blog n'a que quelques articles avant celui-ci, je pense que je vais réuploader toutes les images. Ça sera plus joli et le temps de chargement sera plus court.