こんにちは私はJavaにBufferedImageとしてロードされて保存される画像のサイズを縮小する(あらゆる種類の圧縮を使用する)方法があるかどうか知りたいですPNG。
多分ある種のpngimagewriteparam?役に立ったものが見つからなかったので、行き詰まりました。
画像の読み込みと保存の方法のサンプルを次に示します
public static BufferedImage load(String imageUrl) {
Image image = new ImageIcon(imageUrl).getImage();
bufferedImage = new BufferedImage(image.getWidth(null),
image.getHeight(null),
BufferedImage.TYPE_INT_ARGB);
Graphics2D g2D = bufferedImage.createGraphics();
g2D.drawImage(image, 0, 0, null);
return bufferedImage;
}
public static void storeImageAsPng(BufferedImage image, String imageUrl) throws IOException {
ImageIO.write(image, "png", new File(imageUrl));
}
it's going to be saved as PNG
、圧縮はその段階で行われます。 PNGには、調整可能なパラメーター( " filters "のタイプ)がほとんどなく、圧縮量への影響が少ないロスレス圧縮アルゴリズム(基本的に予測とそれに続くlempel-ziv圧縮)があります。通常、デフォルトが最適です。
pngtastic を試してみてください。これは純粋なJava png画像オプティマイザーであり、png画像をある程度縮小することができます。
ImageIO.write
を呼び出すことにより、pngのデフォルトの圧縮品質を使用します。ファイルサイズを大幅に削減する明示的な圧縮モードを選択できます。
String inputPath = "a.png";
String outputPath = "b.png";
BufferedImage image;
IIOMetadata metadata;
try (ImageInputStream in = ImageIO.createImageInputStream(Files.newInputStream(Paths.get(inputPath)))) {
ImageReader reader = ImageIO.getImageReadersByFormatName("png").next();
reader.setInput(in, true, false);
image = reader.read(0);
metadata = reader.getImageMetadata(0);
reader.dispose();
}
try (ImageOutputStream out = ImageIO.createImageOutputStream(Files.newOutputStream(Paths.get(outputPath)))) {
ImageTypeSpecifier type = ImageTypeSpecifier.createFromRenderedImage(image);
ImageWriter writer = ImageIO.getImageWriters(type, "png").next();
ImageWriteParam param = writer.getDefaultWriteParam();
if (param.canWriteCompressed()) {
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.0f);
}
writer.setOutput(out);
writer.write(null, new IIOImage(image, null, metadata), param);
writer.dispose();
}
ImageWriterParam
クラスと同じパッケージのImageIO
クラスを見てください。圧縮について言及しています。
https://docs.Oracle.com/javase/7/docs/api/javax/imageio/ImageWriteParam.html
http://exampledepot.com/egs/javax.imageio/JpegWrite.html の例も見て、PNGファイルに適切に変換されるかどうかを確認してください。