旋转图像时背景为黑色

我正在尝试使用此代码旋转图像:

File imgPath = new File("c:\\tmp\\7.jpg"); BufferedImage src = ImageIO.read(imgPath); AffineTransform tx = new AffineTransform(); int width = src.getWidth(); int height = src.getHeight(); tx.rotate(radiant ,width, height); AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BICUBIC); BufferedImage out = op.filter(src, null); File outFile = new File("c:\\tmp\\out.jpg"); ImageIO.write(out, "jpg", outFile); 

由于某种原因,旋转后的背景是黑色的。 如何使背景白色或透明?

当您使用AffineTransformOp.filter(src, null)创建新图像时,新图像使用与源图像相同的ColorModel

您的输入图像是jpeg,这意味着它不是透明的,因此目标图像是RGB图像,没有alpha(透明度)级别。

当以这么小的角度旋转时,图像不再占据完全相同的边界,因此背景在其边缘可见,并且因为没有alpha级别,所以背景为黑色是正常的。

但是,如果将其保存为支持gif或png等透明度的格式,则图像将不再显示黑色背景。

 ImageIO.write(out, "gif", outFile); 

完整代码:

  try { File imgPath = new File("d:\\downloads\\about.jpg"); BufferedImage src = ImageIO.read(imgPath); AffineTransform tx = new AffineTransform(); int width = src.getWidth(); int height = src.getHeight(); tx.rotate(0.02050493823247637, width, height); AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BICUBIC); BufferedImage out = op.filter(src, null); File outFile = new File("d:\\downloads\\about0.gif"); ImageIO.write(out, "gif", outFile); } catch (Exception e) { e.printStackTrace(); } 

看看这个更多的信息和技巧。

这是旋转到gif后的图像: 旋转后的gif图像