Java如何在图像中设置DPI信息?

我有一个想要导出高分辨率(或更确切地说是高像素密度?)图像以进行打印的应用程序-例如,我希望以每英寸250点(DPI)的速度打印图像,而不是默认值,据我了解是72 DPI。

我正在使用带有Graphics2D对象的BufferedImage绘制图像,然后使用ImageIO.write()保存图像。

知道如何设置DPI吗?

回答:

Kurt的答案说明了这一点,但我仍然花了一些时间才能运行它,因此这是保存PNG时设置DPI的代码。要找到合适的作家还有很多事情要做……

 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);

}

以上是 Java如何在图像中设置DPI信息? 的全部内容, 来源链接: utcz.com/qa/432849.html

回到顶部