Hallo zusammen,
Ich möchte meine BufferedImages nicht mit 72 sondern 300 DPI speichern.
Im Netz habe ich den folgenden Code gefunden. Der funktioniert allerdings nur für PNG. Andere Formate ausser Bitmap (BMP) werden zwar gespeichert, sie haben allerdings immer noch 72 DPI.
Weiss jemand wo ich den Code anpassen sollte, damit er für alle anderen Formate auch funktioniert?
Ich möchte meine BufferedImages nicht mit 72 sondern 300 DPI speichern.
Im Netz habe ich den folgenden Code gefunden. Der funktioniert allerdings nur für PNG. Andere Formate ausser Bitmap (BMP) werden zwar gespeichert, sie haben allerdings immer noch 72 DPI.
Weiss jemand wo ich den Code anpassen sollte, damit er für alle anderen Formate auch funktioniert?
Java:
BufferedImage image = ImageIO.read(url);
File output = new File("C:\\test\\out.JPG");
final String formatName = "JPG";
for (Iterator<ImageWriter> iw = ImageIO.getImageWritersByFormatName(formatName); iw.hasNext();) {
ImageWriter writer = iw.next();
ImageWriteParam writeParam = writer.getDefaultWriteParam();
ImageTypeSpecifier typeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB);
IIOMetadata metadata = writer.getDefaultImageMetadata(typeSpecifier, writeParam);
if (metadata.isReadOnly() || !metadata.isStandardMetadataFormatSupported()) {
continue;
}
setDPI(metadata);
final ImageOutputStream stream = ImageIO.createImageOutputStream(output);
try {
writer.setOutput(stream);
writer.write(metadata, new IIOImage(image, null, metadata), writeParam);
} finally {
stream.close();
}
break;
}
Java:
private static void setDPI(IIOMetadata metadata) throws IIOInvalidTreeException {
// for PNG, it's dots per millimeter
double dotsPerMilli = 1.0 * 300 / 10 / 2.54;
IIOMetadataNode horiz = new IIOMetadataNode("HorizontalPixelSize");
horiz.setAttribute("value", Double.toString(dotsPerMilli));
IIOMetadataNode vert = new IIOMetadataNode("VerticalPixelSize");
vert.setAttribute("value", Double.toString(dotsPerMilli));
IIOMetadataNode dim = new IIOMetadataNode("Dimension");
dim.appendChild(horiz);
dim.appendChild(vert);
IIOMetadataNode root = new IIOMetadataNode("javax_imageio_1.0");
root.appendChild(dim);
metadata.mergeTree("javax_imageio_1.0", root);
}