0

我正在开发一个 Web 应用程序:

  1. 上传 JPEG 图像
  2. 从中提取一个区域(使用坐标)
  3. 并调整提取区域的大小,而不会降低图像质量。

我用这段代码来做到这一点:

//method to extract an image 
def extractedImage=exractImageRect( imageFile ,  x , y , h , w)

ImageIO.write(extractedImage, "PNG", new File("C:\\Users\\Ma\\Documents\\out.png"));
int type = extractedImage.getType() == 0? BufferedImage.TYPE_INT_ARGB : extractedImage.getType();

//resize the image 
resizedImage =resizeImage(extractedImage,  type ,w*2 , h*2)

但是使用此代码,调整大小的图像质量非常低。我也使用了 RenderingHints: 同样的问题。

所以我的问题是:在使用具有 300dpi 和2479宽度、3508高度的原始图像的高度和宽度时,保持图像质量的最佳方法是什么?

4

2 回答 2

2

并调整提取区域的大小,而不会降低图像质量。

我认为这部分是不可能的。假设您有一张只有 10px X 10px blakc 矩形的图片。现在你将尺寸加倍,将有一个 20px X 20px 的矩形。最初你有 100 个黑色像素,但现在你有 400 个像素,其中 100 个是黑色的,300 个是未知的。您需要通过某种算法确定您的像素颜色是什么。

在这种情况下,它更容易,因为它是黑色的,但是如果你有一张图片而不是一个矩形,那么就不可能准确地确定哪些颜色像素属于未知像素,所以你必须近似但在大多数情况下近似并不完美, 所以会有质量损失

于 2014-05-13T07:57:03.693 回答
0

我已经测试了不同的算法来调整图像大小(请参见此处),提供最佳图像质量的算法是 AVERAGE,但它非常慢。PROGRESSIVE_BILINEAR 是处理时间和图像质量之间的良好折衷。

于 2014-05-13T07:55:09.700 回答