gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:08:44 27 4
gpt4 key购买 nike

我有一个应用程序,我想导出高分辨率(或者更确切地说,高像素密度?)图像进行打印 - 例如,我想要以每英寸 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 信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/321736/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com