Java image scaling improve quality?

杀马特。学长 韩版系。学妹 提交于 2020-01-04 02:06:10

问题


I am currently scaling images using the following code.

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);

Anyone have an idea of a better way of scaling an image and getting better quality results, or even any help on improving my current code to get better quality output.


回答1:


You can use Affine Transorm

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()));
}

Also try this Example .

Also Try java-image-scaling library




回答2:


You might want to look at this image scaling library. It has algorithms like bicubic and Lanczos and also an unsharp filter.




回答3:


Try avoiding Image.getScaledInstance().



来源:https://stackoverflow.com/questions/15975610/java-image-scaling-improve-quality

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!