2

以下のコードを使用して2つの画像をマージします。透明度のない1つのベース画像、透明度のある1つのオーバーレイ画像。そこにある画像のファイルサイズはそれぞれ20kbと5kbです。2つの画像をマージすると、結果のファイルサイズは> 100kbに​​なり、25kbの合計サイズの少なくとも4倍になります。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();
    }       
}
4

2 に答える 2

2

PNGはロスレス形式であるため、ファイルサイズに影響を与える可能性のある主な要因は2つだけです。

  1. ファイルに含まれるピクセル数、および
  2. フォーマットをどれだけうまく圧縮できるか。

オーバーレイをしているように聞こえるので、#1は変わっていないと思います。入力ファイルと出力ファイルのピクセルサイズを比較して、これを再確認してください。

マージされた画像がより複雑であるために問題が発生している可能性があります。そのため、PNGフィルタリングアルゴリズムではファイルの圧縮に苦労します。画像を変更したり、不可逆ファイル形式に切り替えたりする以外に、これについてできることはあまりありません。

もう少し説明するために、1つの真っ白な画像と1つの真っ赤な画像があるとします。どちらも100x100ピクセルです。これらの画像は、エンコードするだけでよいため、非常に簡単に圧縮できます。赤を10000回繰り返します。ここで、他のすべてのピクセルが異なる画像から取得されるように、これらの画像をマージするとします。今ではチェッカーです。適切なエンコードメカニズムを設定している場合でも、[赤、白]を10000回繰り返すと、これをうまくエンコードできる可能性があります。しかし、この理想的なエンコーディングアルゴリズムを使用しても、エンコードされたメッセージのサイズをかなり大きくしたことに気付くでしょう。そして、あなたがこの種のものに完全に理想的なエンコーディングフォーマットを持っていないなら、それはすべてそこから下り坂になります。

一般に、画像のピクセルが互いに比較して変化し、ランダムに見えるほど、結果のファイルは大きくなります。

于 2012-07-05T17:50:31.443 に答える
0

より高い圧縮率/より低い品質のJPEGとして画像を保存します。詳細については、以下を参照してください。

于 2012-07-05T17:59:43.327 に答える