[JAVA] Conversion image JPG vers PNG avec transpar

Presque tout est dans le sujet :

J’essaie de lire une image au format JPEG et de la réécrire en format PNG tout en ajoutant un canal Alpha pour gérer la tranparence.

J’ai écrit cela pour l’instant mais ca ne fonctionne pas :

public Conversion(File fichierSource,File fichierDestination,
String formatType) {
BufferedImage buf = null;
BufferedImage bufFinal = null;
try { buf = ImageIO.read(fichierSource);}
catch (IOException ex) {}
bufFinal = new BufferedImage(
buf.getWidth() ,buf.getHeight(),
BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D) bufFinal.getGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(buf,0,0,buf.getWidth(),buf.getHeight(),new Color(255),null);
g.dispose();
try {ImageIO.write(bufFinal,formatType,fichierDestination);}
catch (IOException e) {e.printStackTrace();}
}

Qui peut m’aider ? SVP

Merci d’avance

Je n’ai pas tout lu, mais si ton buffer de sortie n’a pas de canal alpha, tu n’iras pas loin

TYPE_INT_ARGB

Effectivement.

J’ai changé le tout. J’ai bien 32 bits au lieu de 32 et ma fonction de test de transparence me renvoie bien que la transparence existe.
Ma couleur que je veux rendre transparente est le noire et elle n’est toujours pas transparente… Je ne comprends pas ???

Rappel : Si ton entrée est un jpeg, le noir… N’est pas souvent noir

En général, je récupère le canal alpha d’une autre image (GIF ou PNG 256 couleurs) qui donne direct la transparence.

Au passage Alpha=0 -> Opaque!!! (=Si tu ne met rien, ton image n’est pas toute vide)
1 -> Transparent… 128 -> Opacite~50%… 255 -> Full opaque

– Edit : Il est où ton bout de code pour renseigner l’alpha?

g.drawImage(buf,0,0,buf.getWidth(),buf.getHeight(),new Color(0),null);

c’est new Color(0) la valeur alpha

Mais dans l’image JPEG les pixels à mettre en transparent est à :
0 Rouge 0 Vert 0 Bleu et 255 Alpha (d’après GIMP)

255 = Opaque… Color(255), c’est du bleu :wink:

Dans ma version de la javadoc que j’ai, la valeur de Color représente
“the background color to paint under the non-opaque portions of the image.”
Rien à voir avec la couleur que tu souhaites passer en ‘transparente’

Du coup comment je peux faire pour passer d’une image JPG vers une image créée, à créer en PNG et en mettant la transparence ???

Récupère les pixels (int[]), et fais directement tes transformations dessus… Je pense que c’est vraiment le plus simple

Bonjour,
ben s’il n’y a pas de méthode plus efficace, il faut boucler sur tous les pixels et si la valeur RVB est inférieure à un seuil (presque noire) alors tu la remplace par un new Color(0,0,0,1) .

Note: d’après la doc, pour avoir la couche Alpha, il ne faut pas utiliser le Constructeur Color(int) qui renvoie du opaque.

edit: grilled by [myself]: bonne idée :super: et donc remplacer par 0x01000000 tous les pixels presque noirs.

Edit2: la Solution Objet, c’est de passer par un imageFilter qui te filtre l’image d’entrée (en RGB) pour recalculer limage de sortie (avec couche Alpha, tu hérite de RGBFilter:
http://java.sun.com/j2se/1.4.2/docs/api/
et tu passe l’instance de cette classe en paramètre à un FilteredImageSource:
http://java.sun.com/j2se/1.4.2/docs/api/ja…mageSource.html

:slight_smile: