磁盘上的映像文件大小(KB)随着java中动态映像大小调整(缩小大小)而增加

时间:2012-12-13 09:14:08

标签: java image image-resizing graphics2d filesize

我是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;
    }

1 个答案:

答案 0 :(得分:0)

PNG压缩的工作原理如下:它使用预测器来预测先前值的像素值,“zip”压缩得到的增量变化。图像中存在的低频内容越多,PNG就越能压缩它。

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

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