旋转图像时背景为黑色
我正在尝试使用此代码旋转图像:
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后的图像:
- 在模板中嵌入java代码
- JSP / Servlet设计问题 – 通过JNDI全局提供请求/响应
- 在Applet中加载ActiveX对象
- 为什么每个应用程序有一个JVM?
- 使用Selenium WebDriver和Java在浏览器选项卡之间切换
- 带通配符的嵌套generics
- 如何在不使用管理面板的情况下连接Volusion DB
- 调用init方法失败; 嵌套exception是java.lang.IllegalArgumentException:对于方法public abstract的查询,validation失败
- 将LongBuffer / IntBuffer / ShortBuffer转换为ByteBuffer