Java 旋转BuffereImage会更改图像的大小

Java 旋转BuffereImage会更改图像的大小,java,image,rotation,bufferedimage,Java,Image,Rotation,Bufferedimage,我试图将一个缓冲图像旋转90°,但我无法完全完成 我可以旋转图像,但结果图像有点奇怪 1) 左右两侧有黑色边框 2) 信息的丢失 下面是一个例子: 这是原始图像 旋转图像后,我得到以下结果: 我真的不知道我做错了什么 这是我用来旋转BuffereImage的代码: BufferedImage imgIn = ImageIO.read(new File("landscape.jpg")); BufferedImage imgIn2 = imgIn; AffineTransfor

我试图将一个
缓冲图像旋转90°,但我无法完全完成

我可以旋转图像,但结果图像有点奇怪

1) 左右两侧有黑色边框

2) 信息的丢失

下面是一个例子:

这是原始图像

旋转图像后,我得到以下结果:

我真的不知道我做错了什么

这是我用来旋转BuffereImage的代码:

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

非常感谢您的帮助

带有仿射变换

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

public class test {
    public static void main(String[] arg)throws Exception
    {
        BufferedImage imgIn = ImageIO.read(new File("/home/arpit/Desktop/image.jpg"));
        BufferedImage imgIn2 =  new BufferedImage(imgIn.getHeight(), imgIn.getWidth(), imgIn.getType());

        AffineTransform tx = new AffineTransform();
        tx.rotate(Math.PI / 2, imgIn2.getWidth() / 2, imgIn.getHeight() / 2);
        AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
        op.filter(imgIn, imgIn2);

        ImageIO.write(imgIn2, "JPEG", new File("/home/arpit/Desktop/testrotated.jpg"));
    }
}
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

public class test {
    public static void main(String[] arg)throws Exception
    {
        BufferedImage imgIn = ImageIO.read(new File("/home/arpit/Desktop/image.jpg"));
        BufferedImage imgIn2 =  new BufferedImage(imgIn.getHeight(), imgIn.getWidth(), imgIn.getType());

        for(int x=0;x<imgIn.getWidth();x++)
        {
            for(int y=0;y<imgIn.getHeight();y++)
            {
                int color = imgIn.getRGB(x,y);
                imgIn2.setRGB(imgIn2.getWidth()-1-y,x,color);

            }
        }
        ImageIO.write(imgIn2, "JPEG", new File("/home/arpit/Desktop/testrotated.jpg"));
    }
}
无仿射变换

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

public class test {
    public static void main(String[] arg)throws Exception
    {
        BufferedImage imgIn = ImageIO.read(new File("/home/arpit/Desktop/image.jpg"));
        BufferedImage imgIn2 =  new BufferedImage(imgIn.getHeight(), imgIn.getWidth(), imgIn.getType());

        AffineTransform tx = new AffineTransform();
        tx.rotate(Math.PI / 2, imgIn2.getWidth() / 2, imgIn.getHeight() / 2);
        AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
        op.filter(imgIn, imgIn2);

        ImageIO.write(imgIn2, "JPEG", new File("/home/arpit/Desktop/testrotated.jpg"));
    }
}
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

public class test {
    public static void main(String[] arg)throws Exception
    {
        BufferedImage imgIn = ImageIO.read(new File("/home/arpit/Desktop/image.jpg"));
        BufferedImage imgIn2 =  new BufferedImage(imgIn.getHeight(), imgIn.getWidth(), imgIn.getType());

        for(int x=0;x<imgIn.getWidth();x++)
        {
            for(int y=0;y<imgIn.getHeight();y++)
            {
                int color = imgIn.getRGB(x,y);
                imgIn2.setRGB(imgIn2.getWidth()-1-y,x,color);

            }
        }
        ImageIO.write(imgIn2, "JPEG", new File("/home/arpit/Desktop/testrotated.jpg"));
    }
}
导入javax.imageio.imageio;
导入java.awt.image.buffereImage;
导入java.io.File;
公开课考试{
公共静态void main(字符串[]arg)引发异常
{
buffereImage imgIn=ImageIO.read(新文件(“/home/arbit/Desktop/image.jpg”);
BuffereImage imgIn2=新的BuffereImage(imgIn.getHeight(),imgIn.getWidth(),imgIn.getType());

对于(int x=0;xDid)您是否尝试使用
AffineTransform#setToQuadrantRotation()
来代替?@JimGarrison我没有尝试使用它。这并不能真正回答问题,并且可能比使用库转换慢得多。那么,我将使用
AffineTransform
类用代码更新答案。