调整图像大小而不会降低质量

时间:2014-05-13 07:29:09

标签: java image bufferedimage resize-image

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

  1. 上传JPEG图片
  2. 从中提取区域(使用坐标)
  3. 并调整提取的区域大小,而不会降低图像质量。
  4. 我使用此代码执行此操作:

    //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 身高?

2 个答案:

答案 0 :(得分:2)

  

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

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

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

答案 1 :(得分:0)

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