He estado siguiendo algunos enlaces StackOverflow usando Graphics2D para cambiar el color de fondo de un BufferedImage.
El proyecto que estoy trabajando requiere que leí una imagen PNG a partir de una URL determinada en; la imagen PNG recuperado tiene un fondo transparente, y me gustaría ponerlo en blanco.
Aquí es lo que tengo:
String u = this.format() ;
BufferedImage image = null ;
try{
URL url = new URL(u) ;
image = ImageIO.read(url) ;
Graphics2D graphics = image.createGraphics() ;
graphics.setBackground(Color.WHITE) ;
graphics.clearRect(0, 0, image.getWidth(), image.getHeight()) ;
ImageIO.write(image, "png", new File(outPath + fileName)) ;
graphics.dispose() ;
}
catch(IOException e){
e.printStackTrace() ;
}
El problema que estoy en es que cuando veo la imagen, la imagen aparece como un cuadro sólido de color blanco. Al parecer tengo superpuesto un fondo blanco en la parte superior de la imagen existente que fui a buscar.
¿Cómo preservar I la imagen original y sólo cambiar el fondo? O configurar el fondo primero y luego superponer la imagen recuperada?
1- Coloque su imagen
image = ImageIO.read(url) ;
2- Crear una nueva BufferedImage
del mismo tamaño
BufferedImage background = new BufferedImage(image.getWidth(), image.getHeight, BufferedImage.TYPE_INT_RGB);
3- Llenar la background
imagen con el color deseado
Graphics2D g2d = background.createGraphics();
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, background.getWidth(), background.getHeight());
4- Dibujar la imagen original en el fondo ...
g2d.drawImage(image, 0, 0, null);
g2d.dispose();
background
Ahora se llena con el color deseado y tiene la imagen pintada en la parte superior o ella.