I have the following code:
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;
}
}
If I use this code on a .png file, it works fine, and resizes the file as expected. However on jpg files, it results in a black background.
If I remove the getScaledInstance()
code and simply try to re-write the original bm1
to the disk using ImageIO.write(bm1, "jpg", resized)
, that works fine. Only when resizing using getScaledInstance()
and then trying to conver the resulting Image
back to BufferedImage
, do I get a completely black background file.
Any ideas on how to fix this, or what I'm doing wrong?