1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| BufferedImage image = ...;
/* création d'un ImageWriter */
ImageTypeSpecifier type = ImageTypeSpecifier.createFromRenderedImage(image);
Iterator<ImageWriter> iter = ImageIO.getImageWriters(type, "png");
ImageWriter writer = null;
if(iter.hasNext()) {
writer = iter.next();
} else {
throw new Exception("ImageWriter not found.");
}
/* création d'un jeu de meta-données */
IIOMetadata metadata = writer.getDefaultImageMetadata(type, null);
/* modification des meta-données via une sutcture DOM */
IIOMetadataNode root = (IIOMetadataNode)metadata.getAsTree("javax_imageio_png_1.0");
IIOMetadataNode node;
NodeList nodeList = root.getElementsByTagName("pHYs");
if(nodeList.getLength() > 0) {
node = (IIOMetadataNode)nodeList.item(0);
} else {
node = (IIOMetadataNode)root.appendChild(new IIOMetadataNode("pHYs"));
}
node.setAttribute("pixelsPerUnitXAxis", "11811"); // résolution en largeur en pixels par mètre.
node.setAttribute("pixelsPerUnitYAxis", "11811"); // résolution en hauteur en pixels par mètre.
node.setAttribute("unitSpecifier", "meter"); // unité de résolution toujours en mètre.
metadata.setFromTree("javax_imageio_png_1.0", root);
/* Ecriture du fichier */
try {
writer.setOutput(ImageIO.createImageOutputStream(new File(...)));
writer.write(new IIOImage(image, null, metadata));
} finally {
writer.dispose();
} |
Partager