【问题标题】:Rotating a BufferedImage gives it a black border [duplicate]旋转 BufferedImage 会给它一个黑色边框[重复]
【发布时间】:2017-03-31 04:22:36
【问题描述】:

我尝试旋转 BufferedImage 并且它可以工作,但旋转后的图像在某些边上有黑色边框,我不知道为什么...... 我也觉得旋转后变小了。

import java.awt.image.BufferedImage;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;


public class example {

   static void main(String[] args) throws IOException {

        BufferedImage imgResc = ImageIO.read(new File("landscape.jpg"));        

        AffineTransform tx = new AffineTransform();
        tx.rotate(Math.PI / 2, imgResc.getWidth() / 2, imgResc.getHeight() / 2);//(radian,arbit_X,arbit_Y)
        AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
        BufferedImage rotatedImage = new BufferedImage(imgResc.getHeight(),imgResc.getWidth(),imgResc.getType());
        op.filter(imgResc, rotatedImage);
        ImageIO.write(rotatedImage, "JPEG", new File("rotated_90_right.jpg"));
    } 
}

上面是我在网上找到的旋转图像的代码 sn-p。

帮助会很棒!

编辑:

这就是它的样子以及旋转后得到的效果: (1920 x 1200)

【问题讨论】:

  • 你的宽度或高度有可能是奇数吗?如果是这样,除以 2 会引入舍入误差,将图像缩小一个像素。这是边框的大小吗?
  • 我编辑了问题并添加了结果的图片。
  • 它也没有在您发布的内容中旋转...
  • @Andrew 你是什么意思?
  • 我看到的图像具有相同的尺寸和方向;第二个只是缩小了边框,但没有旋转。看起来其他人也有这个问题。见:stackoverflow.com/questions/34143111/…

标签: java bufferedimage image-rotation affinetransform


【解决方案1】:

如果按 PI/2 旋转,则新图像的宽度是源的高度,高度是源的宽度,所以:

BufferedImage rotatedImage = new BufferedImage(imgResc.getHeight(),
                                               imgResc.getWidth(),
                                               imgResc.getType());

会更好。

【讨论】:

  • 这是一个很好的建议,但它没有回答所提出的问题,因为 OP 描述了四面八方的黑色边框,并且图像可能会缩小
  • 你说得对,谢谢。不过,黑色边框的问题仍然存在。
猜你喜欢
  • 2018-07-13
  • 2017-03-25
  • 1970-01-01
  • 2010-11-24
  • 2013-05-18
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
相关资源
最近更新 更多