0

我是 Java 新手。我通过保持纵横比将大尺寸的 png 文件调整为标准文件大小。下面是我使用的代码片段。但我在这段代码片段中看到的缺点是,重新调整大小后文件大小比原来的大得多。例如,原始大小为 5kb,重新调整大小的新大小为 16kb。

请帮助我避免此文件大小在调整大小时变大

 public void SaveImage(String imagePath, BufferedImage image) {
        try {
            BufferedImage bi = image;
            File newImageFile = new File(imagePath);
            ImageIO.write(bi, "png", newImageFile);
        } catch (IOException e) {

        }
    }

    public BufferedImage resizeImage(final Image image, Dimension newDimension) {
        final BufferedImage bufferedImage = new BufferedImage(newDimension.width, newDimension.height, BufferedImage.TYPE_INT_RGB);
        final Graphics2D graphics2D = bufferedImage.createGraphics();
        //graphics2D.setComposite(AlphaComposite.Src);

        graphics2D.drawImage(image, 0, 0, newDimension.width, newDimension.height, null);
        graphics2D.dispose();

        return bufferedImage;
    }
4

1 回答 1

0

PNG 压缩的工作原理是这样的:它使用一个预测器从以前的值中预测一个像素值,然后“zip”压缩产生的增量变化。图像中出现的低频内容越多,PNG 压缩它的效果就越好。

调整大小会改变内容,并且可能会阻止 PNG 预测器检测可以更好地压缩的长时间运行。缩小图像将增强高频,从而导致更高的熵,从而导致更小的压缩比。

或者它只是由编写器引起的ImageIO,它可能没有为 PNG 设置最佳压缩方法。看看ImageWriter它的ImageWriterParam. ImageWriter可以通过 获得ImageIO.getImageWritersByFormatName(String formatName)

于 2012-12-13T09:26:22.283 回答