Redimensionando BufferedImages e armazenando-os para o arquivo resulta em fundo preto para imagens JPG
Eu tenho o seguinte código:
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class JavaApplication
{
public static void main(String[] args) throws Exception
{
File orig = new File ("/home/xxx/Pictures/xxx.jpg");
BufferedImage bm1 = ImageIO.read(orig);
Image scaled = bm1.getScaledInstance(100, 200, BufferedImage.SCALE_SMOOTH);
BufferedImage bm2 = toBufferedImage(scaled);
File resized = new File ("/home/xxx/Pictures/resized.jpg");
ImageIO.write(bm2, "jpg", resized);
}
public static BufferedImage toBufferedImage(Image img)
{
if (img instanceof BufferedImage)
{
return (BufferedImage) img;
}
BufferedImage bimage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
bimage.getGraphics().drawImage(img, 0, 0 , null);
return bimage;
}
}
Se eu usar esse código em um arquivo .png, ele funciona bem e redimensiona o arquivo conforme o esperado. No entanto, em arquivos jpg, isso resulta em um fundo preto.
Se eu remover ogetScaledInstance()
código e simplesmente tentar reescrever o originalbm1
para o disco usandoImageIO.write(bm1, "jpg", resized)
Isso funciona bem. Somente ao redimensionar usandogetScaledInstance()
e, em seguida, tentando converter o resultanteImage
de volta aBufferedImage
, obtenho um arquivo de plano de fundo completamente preto.
Alguma idéia de como consertar isso ou o que estou fazendo de errado?