別のブログで公開してたものです。
一部をこっちのブログに移行しようと手動で(^^;)移行したものです。
Javaで解像度(dpi)を設定してJPEG保存する方法を調べてみた。
次のようにするとできる。
public static boolean saveJpeg(FileOutputStream outputStream, BufferedImage img, float compression, int dpi) {
if(compression < 0 || compression > 1f) {
return false;
}
ImageWriter iw = ImageIO.getImageWritersByFormatName("jpeg").next();
try (ImageOutputStream ios = ImageIO.createImageOutputStream(outputStream)) {
iw.setOutput(ios);
JPEGImageWriteParam param = (JPEGImageWriteParam)iw.getDefaultWriteParam();
param.setCompressionMode(JPEGImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(compression);
IIOMetadata imageMeta = iw.getDefaultImageMetadata(new ImageTypeSpecifier(img), param);
Element tree = (Element) imageMeta.getAsTree("javax_imageio_jpeg_image_1.0");
Element jfif = (Element) tree.getElementsByTagName("app0JFIF").item(0);
jfif.setAttribute("resUnits", "1"); // 解像度の単位をDPIにする。
jfif.setAttribute("Xdensity", Integer.toString(dpi)); // 解像度設定
jfif.setAttribute("Ydensity", Integer.toString(dpi));
// メタデータを設定
imageMeta.setFromTree("javax_imageio_jpeg_image_1.0", tree);
// 書き込み
iw.write(null, new IIOImage(img, null, imageMeta), param);
} catch (IOException ex) {
return false;
}
iw.dispose();
return true;
}
コメント