合并后的两个图像 - >大小的4倍! 如何减小文件的大小?(Merged two imag

2019-07-30 06:43发布

我合并使用下面的代码的两个图像。 没有透明度的一个基本图像,具有透明度的一个覆盖图像。 一个有自己图像的文件大小为20KB和5KB,分别。 一旦予合并两个图像,生成的文件大小是> 100KB,因此至少4倍25KB的组合尺寸。 我预计将比25KB以下的文件大小。

public static void mergeTwoImages(BufferedImage base, BufferedImage overlay, String destPath, String imageName) {

    // create the new image, canvas size is the max. of both image sizes
    int w = Math.max(base.getWidth(), overlay.getWidth());
    int h = Math.max(base.getHeight(), overlay.getHeight());
    BufferedImage combined = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

    // paint both images, preserving the alpha channels
    Graphics2D g2 = combined.createGraphics();
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g2.drawImage(base, 0, 0, null );
    g2.drawImage(overlay, 0, 0, null);
    g2.dispose();

    // Save as new image
    saveImage(combined, destPath + "/" + imageName + "_merged.png");
}

我的应用程序必须是具有非常好的性能,从而任何人都可以解释我为什么这个效应发生,我怎么能减少生成的文件大小?

非常感谢!

编辑:非常感谢您的回答。 该saveImage代码是:

public static void saveImage(BufferedImage src, String file) {
    try {
        File outputfile = new File(file);
        ImageIO.write(src, "png", outputfile);
    } catch (IOException e) {
        e.printStackTrace();
    }       
}

Answer 1:

由于PNG是一种无损格式,只有两个有可能影响文件大小的主要因素:

  1. 多少像素的文件中,并
  2. 如何很好的格式可以被压缩。

因为它听起来就像你正在做的覆盖,我猜#1没有改变。 比较输入和输出文件的像素尺寸双重检查。

最有可能你看到的问题,因为你的合并图像比较复杂,所以PNG滤波算法有困难时压缩文件。 这里没有什么可以做这个,总之改变图像或切换到有损文件格式。

为了进一步说明只是有点,让我们假设你有一个全白图像和一个全红色的图像。 两者都是100×100像素。 这些图像将是非常容易压缩,因为你只需要编码:红色重复10000次。 现在,假设你在每一个像素来自不同图像的方式合并这些图像。 现在,它的方格。 如果你有一个良好的编码机制建立,你仍可以说编码这口井:重复[红色,白色] 10000次。 但是,你即使有这种理想的编码算法发现,我已经相当多的增加了我的编码消息的大小。 如果你没有一个编码格式是完全理想的这样的事情,这一切都从那里顺心。

一般情况下,图像的更多样化的和随机似乎像素是,相对于彼此,较大的产生的文件将是。



Answer 2:

保存图像为JPEG具有更高的压缩比/质量较低。 有关详细信息,请参阅:

  • 如何降低Java图像缩略图大小
  • 这回答“在图片的Java文本”为SSCCE。



文章来源: Merged two images --> 4 times the size! How do I reduce the file size?