私はImageIO
、javax.imageio
API を使用して画像を読み取り、DPI/PPI を調整し (例については以下を参照)、必要に応じてサイズを変更するimgscarやサムネイルレーターなどのパッケージを使用します。
コードは次のようになります。
// input is typically a File or InputStream
// Wrap in ImageInputStream
ImageInputStream stream = ImageIO.createImageInputStream(input);
// Obtain reader
ImageReader reader = ImageIO.getImageReaders(stream).next(); // In real code, test for presence
reader.setInput(stream);
String formatName = reader.getFormatName(); // Get the format name
ImageReadParam param = reader.getDefaultReadParam();
// ... modify params as you see fit, or just go with defaults
IIOImage image = reader.readAll(0, param);
RenderedImage red = image.getRenderedImage();
BufferedImage buf = (BufferedImage) red; // In real code, test if it's safe, or convert
// .. pas buf along to imgscalr or thumnailator
image.setRenderedImage(buf);
IIOMetadata meta = image.getMetadata();
// ... modify DPI in meta data
ImageWriter writer = reader.getImageWriter();
writer.write(null, image, null); // Or modify write params if you need (last parameter)
ここで、JPEG ファイルの DPI を変更する例を確認できます。