- private BufferedImage gridImage;
- ...
- private void saveGridImage(File output) throws IOException {
- output.delete();
- final String formatName = "png";
- 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(gridImage, null, metadata), writeParam);
- } finally {
- stream.close();
- }
- break;
- }
- }
- private void setDPI(IIOMetadata metadata) throws IIOInvalidTreeException {
- // for PMG, it's dots per millimeter
- double dotsPerMilli = 1.0 * DPI / 10 / INCH_2_CM;
- 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);
- }
代码来源:http://stackoverflow.com/questions/321736/how-to-set-dpi-information-in-an-image
其中DPI就是你要设置的值,java中默认是72,如果需要打印图片,可能就要设置为300
INCH_2_CM表示1英寸等于多少厘米,这里就是2.54