3

アプリケーション全体で共通の形式を png として使用しています。アップロードされた jpg 画像は、以下のコードを使用して png として保存されます。

java.awt.image.BufferedImage bufferedImage = ImageIO.read(jpgImagePAth);

 if(!IsExtensionPng(jpgImagePath)){
        ImageIO.write(bufferedImage, "png", new File(pptFolder, justNamePng));
  }

ただし、これは jpg に含まれていなくてもアルファを保持するため、2MB の Image は 7MB になり、6MB は 16MB になります。alpha を維持せずに png を保存する方法はありますか?

PNG に変換する必要があるのは、後で画像にテキストを追加すると、実際の解像度が失われるためです。私はすでにそれを修正しなかったロスレスJPEGを試しました。

4

2 に答える 2

2

ファイルサイズを大きくしているのはアルファチャネルではなく、ファイルタイプです。JPGは不可逆圧縮を使用します。PNGは可逆圧縮です。つまり、JPGは、ファイルのサイズを縮小するために一部のデータをスローしています。そのため、JPGに保存するときに「品質」レベルを選択できます。これにより、スローされる量が決まります。

とにかくアルファチャネルを取得していることをどうやって知っていますか?それでもPNGが必要で、アルファチャネルをドロップしていることを確認したい場合は、画像タイプをBufferedImage.TYPE_RGBに設定します。例:

BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_RGB);

新しいBufferedImageに関連付けられたグラフィックスオブジェクトを取得し、それにjpgをコピーしてから、書き出す必要があります。 この質問はあなたの質問とまったく同じではありませんが、役立つと思われるサンプルコードがあります。

ポール

于 2011-05-18T17:40:50.620 に答える
1

あなたがどのような状況にあるのか正確にはわかりません。しかし、私はJPEG JPEGを保持する必要があります。JPEG を PNG に変換する唯一の利点は、hdd スペースを浪費することです。

于 2011-05-18T17:25:50.193 に答える