0
サイズを小さくするためにpngイメージ(6.8 MB)を圧縮しようとしていますが、私はそのキルトの多くを失っているという問題に直面しています。私がこれらの行にコメントしても、イメージを圧縮するときに正しい値をsetCompressionQuality()に設定します。
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.9f);
私はスクリーンショットのように画像を取得していますが、サイズは(812 KB)です。ラインで私は(1.24 MB)のサイズのPNG画像を取得していますが、両方のケースでは、 の違いなしで(黒い背景でも)スクリーンショットのようにイメージを取得しています。どのようにしてより良いキルトでイメージを圧縮できますか?また、私は、次のsetCompressionQuality(0.9f)として0-1の間の浮動小数点値を設定することによって、品質vlaueを構成できると考えました。
package ImageCompressor;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Iterator;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
public class ImageComprossor {
public static void main(String[] args) {
BufferedImage img = null;
try {
File input = new File("strawberry.png");
BufferedImage image = ImageIO.read(input);
File compressedImageFile = new File("strawberry_compressed.png");
OutputStream os = new FileOutputStream(compressedImageFile);
Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");
ImageWriter writer = writers.next();
ImageOutputStream ios = ImageIO.createImageOutputStream(os);
writer.setOutput(ios);
ImageWriteParam param = writer.getDefaultWriteParam();
// Check if canWriteCompressed is true
if (param.canWriteCompressed()) {
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.9f);
}
// End of check
writer.write(null, new IIOImage(image, null, null), param);
} catch (IOException e) {
e.printStackTrace();
}
}
}
なぜ 'ImageWriter'を取得するのに' jpg'を使用していますか? 'ImageIO.getImageWritersByFormatName(" png ")'に変更してから、利用可能な圧縮タイプ( 'param.getCompressionTypes()')を取得しようとすると、 'java.lang.UnsupportedOperationException:Compression not supported '。 –