JPEGは、人間の目が非常によく気づくことができない情報を捨てるフォーマットであるlossy image compressionである。ただし、画像を圧縮するときの画質設定によっては、ブロックや汚れなどの画像が表示されることがあります。これが画像の背景にはっきりと現れない理由です。
ImageIO.write
の方法では、画像の見栄えを維持するために必要以上に低品質の設定でJPEGを保存している可能性があります。
高画質設定を高くするには、ImageWriteParam
を使用して画質設定を指定し、次にImageWriter
を使用してJPEGを出力する必要があります。関心の
// Get a writer for JPEG.
ImageWriter iw = ImageIO.getImageWritersByFormatName("jpeg").next();
iw.setOutput(new FileImageOutputStream(outputFile));
// Set the compression quality to 0.9f.
ImageWriteParam iwParam = iw.getDefaultWriteParam();
iwParam.setCompressionQuality(0.9f);
// Write image
iw.write(null, new IIOImage(imageToWrite, null, null), iwParam);
方法:たとえば
他の回答が言及として、JPEGは圧縮には適していない、と述べた
テキストとイラスト。画像の品質を保つことが目的でJPEGの圧縮よりもファイルサイズが大きくなる場合は、lossless image compressionの形式、たとえばPNGを使用すると、そのまま画像の品質が失われることはありません。ただし、多くの場合、PNGファイルのファイルサイズはJPEGよりも大きくなります。
写真やその他の現実的な画像では、JPEGなどの非可逆圧縮形式は、ファイルサイズと品質のトレードオフに対してはうまく機能しますが、可逆圧縮PNGのようなフォーマットは、グラデーション効果の少ない類似した色の広い領域があるイラストやラインアートの方が効果的です。
も参照してください。http://stackoverflow.com/questions/2336522/png-vs-gif-vs-jpeg-when-best-to-use –