使用AffineTransform转换图像后,照片质量不佳

时间:2016-04-28 21:00:46

标签: java photo bufferedimage affinetransform

我正在尝试使用EXIF信息修正照片方向,照片正确旋转但旋转后它们的质量非常低......我的猜测是在写入新图像时传递的参数错误。任何帮助表示赞赏。

Before After

2016-01-18T05:00:00:000Z

3 个答案:

答案 0 :(得分:1)

感谢所有的帮助:-) 改变转换功能后,问题解决了,不知道为什么会这样,gpasch可能是对的

    public static BufferedImage transformImage(BufferedImage image, AffineTransform transform) throws Exception {

    AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BICUBIC);
    BufferedImage destinationImage = new BufferedImage(image.getWidth(),image.getHeight(), image.getType());
    destinationImage = op.filter(image, destinationImage);
    return destinationImage;
}

答案 1 :(得分:0)

这可以解决您的问题。根据AffineTransformOp

Thread.Sleep

因此我建议如下:

"If destCM is null, an appropriate ColorModel is used; this ColorModel may 
have an alpha channel even if the source ColorModel is opaque."

甚至放弃兼容的图像:

AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BICUBIC);
BufferedImage destinationImage = op.createCompatibleDestImage(image,  null );
destinationImage = op.filter(image, null);
return destinationImage;

此外,我不确定Bicubic是那么重要,但可能不是问题。

因为兼容图像返回带有alpha的图像,即透明

AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BICUBIC);
BufferedImage destinationImage = op.filter(image, null);
return destinationImage;

会在图像上放一层透明图案;之后绘制的图像与白色融合。

答案 2 :(得分:0)

保持简单,您应该使用操作期望的尺寸:

AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
BufferedImage destinationImage = op.filter(bImage, op.createCompatibleDestImage(bImage, null));