Java图像缩放如何提高质量?

3

目前我正在使用以下代码对图像进行缩放。

Image scaledImage = img.getScaledInstance( width, int height, Image.SCALE_SMOOTH);
BufferedImage imageBuff = new BufferedImage(width, scaledImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics g = imageBuff.createGraphics();
g.drawImage(scaledImage, 0, 0, new Color(0, 0, 0), null);
g.dispose();
ImageIO.write(imageBuff, "jpg", newFile);

有没有更好的方法来缩放图像并获得更好的质量结果,或者甚至有任何帮助来改进我的当前代码以获得更好的输出质量。


你可以查看 http://docs.oracle.com/javase/7/docs/api/java/awt/Image.html 上的 SCALE_* 字段。 - Kninnug
我认为这会很有帮助 http://ebhor.com/high-quality-thumbnail-generation-in-java/ - xrcwrn
我在这里详细回答了你的问题:https://dev59.com/XG865IYBdhLWcg3wIrBg#32266733 - nemo
3个回答

3
你可以使用 仿射变换
public static BufferedImage getScaledImage(BufferedImage image, int width, int height) throws IOException {
    int imageWidth  = image.getWidth();
    int imageHeight = image.getHeight();

    double scaleX = (double)width/imageWidth;
    double scaleY = (double)height/imageHeight;
    AffineTransform scaleTransform = AffineTransform.getScaleInstance(scaleX, scaleY);
    AffineTransformOp bilinearScaleOp = new AffineTransformOp(scaleTransform, AffineTransformOp.TYPE_BILINEAR);

    return bilinearScaleOp.filter(
        image,
        new BufferedImage(width, height, image.getType()));
}

也可以尝试这个 示例

还可以尝试 java-image-scaling 库。


使用java-image-scaling库获得了最佳结果。 - JCS

2
你可能想看看这个图片缩放库。它具有双三次和Lanczos等算法,还有一个锐化滤镜。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接