我有以下代码:
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;
}
}
如果我在 .png 文件上使用此代码,它可以正常工作,并按预期调整文件大小。但是在 jpg 文件中,它会导致黑色背景。
如果我删除getScaledInstance()
代码并尝试使用 将原始代码重新写入bm1
磁盘ImageIO.write(bm1, "jpg", resized)
,则效果很好。只有在使用调整大小getScaledInstance()
然后尝试将结果转换Image
回时BufferedImage
,我才会得到一个完全黑色的背景文件。
关于如何解决这个问题的任何想法,或者我做错了什么?