Java 旋转图像质量下降

发布于 2024-10-26 06:43:02 字数 912 浏览 0 评论 0 原文

我有旋转图像的功能。虽然我失去了质量。有什么改变可以改善它吗?

 public BufferedImage RotateImage(String imagePath,int degrees) throws IOException{ 
         File file = new File(imagePath);
         Image image = ImageIO.read(file);
         BufferedImage img=bufferImage(image, BufferedImage.TYPE_INT_RGB);

         AffineTransform tx = new AffineTransform();
         double radians = (Math.PI / 180) * degrees;

         double width = img.getWidth()/2;
         double height = img.getHeight()/2;

         if(degrees != 180){
             tx.translate(height,width);
             tx.rotate(radians);
             tx.translate(-width,-height);
         }else{                      
         tx.rotate(radians,width, height);
         }

         AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
         img = op.filter(img, null);
         return img;
         }

I have this function for rotating images.Although i am loosing quality.Any there any change which can improve it ?

 public BufferedImage RotateImage(String imagePath,int degrees) throws IOException{ 
         File file = new File(imagePath);
         Image image = ImageIO.read(file);
         BufferedImage img=bufferImage(image, BufferedImage.TYPE_INT_RGB);

         AffineTransform tx = new AffineTransform();
         double radians = (Math.PI / 180) * degrees;

         double width = img.getWidth()/2;
         double height = img.getHeight()/2;

         if(degrees != 180){
             tx.translate(height,width);
             tx.rotate(radians);
             tx.translate(-width,-height);
         }else{                      
         tx.rotate(radians,width, height);
         }

         AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
         img = op.filter(img, null);
         return img;
         }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

彩虹直至黑白 2024-11-02 06:43:02

尝试使用双三次或双线性。链接显示了每个的示例。

AffineTransformOp op = 
    new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);

Try using bicubic or bilinear. Link shows an example of each.

AffineTransformOp op = 
    new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
不念旧人 2024-11-02 06:43:02

其他几个提到的 AffineTransform 过滤参数很重要,但它也取决于图像所采用的编码。如果是 JPEG,无损旋转并非普遍可行

The AffineTransform filtering parameter several others mentioned is important, but it also depends on the encoding your images come in. If it's JPEG, lossless rotation isn't universally possible.

深爱不及久伴 2024-11-02 06:43:02

AffineTransformOp.TYPE_NEAREST_NEIGHBOR 总是会让一切看起来都像blergh。尝试使用 AffineTransformOp.TYPE_BILINEARAffineTransformOp.TYPE_BICUBIC

AffineTransformOp.TYPE_NEAREST_NEIGHBOR will always make everything look like blergh. Try using AffineTransformOp.TYPE_BILINEAR or AffineTransformOp.TYPE_BICUBIC.

谈场末日恋爱 2024-11-02 06:43:02

尝试使用任一
TYPE_BICUBIC

TYPE_BILINEAR

Try using either
TYPE_BICUBIC

or

TYPE_BILINEAR

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文