2013-08-25 82 views
-2

我想尝试缩放图像最多3次。图像调整UpScale丢失质量

例如,

Original Image

最多缩放图像

Resized Image

我用这library的图像缩放。

剪断下面的代码做的伎俩,

public static BufferedImage getScaledSampledImage(BufferedImage img, 
      int targetWidth, int targetHeight, boolean higherQuality) { 

     ResampleOp resampleOp = new ResampleOp(targetWidth, targetHeight); 
     resampleOp.setUnsharpenMask(AdvancedResizeOp.UnsharpenMask.Normal); 
     BufferedImage rescaledImage = resampleOp.filter(img, null); 

     return rescaledImage; 
    } 

你可以看到有一个缩放后的图像质量较低。我希望我可以放大图像比原始图像至少3倍,而不会丢失质量。

它是否可以使用?我是否需要改变现有的图书馆?

感谢

+2

没有涉及“图像丢失”。没有图像质量的大小开始。这是纯粹的光学,与代码无关。最好的解决方案是使用最大可能的原始图像开始。 –

+1

可能的重复[如何在java中放大图像而不会丢失质量?](http://stackoverflow.com/questions/9281385/how-might-i-enlarge-image-in-java-without-losing-quality) –

回答

5

的事实是,当你缩放图像时,它必须创造一个有没有数据。 (大致说来)。要做到这一点,你必须插入现有的像素之间来填充新的像素。您可以通过尝试不同类型的插值获得更好的结果 - 但对于不同种类的图像,最佳方法会有所不同。

由于您的样本图像只是正方形,所以最近邻居插值可能会给您最好的结果。如果您要放大风景或者肖像的图像,则需要更聪明的算法。

结果很少看起来很完美,如果可能的话,最好从较大的图像开始!

看看这里了解问题。 http://en.wikipedia.org/wiki/Image_scaling#Scaling_methods