繁体   English   中英

如何在Java中为PNG设置每平方英寸点数(DPI)?

[英]How to set Dots Per Square Inch (DPI) for PNG in Java?

让我先说我没有代码,我不知道我想做什么。 显然,信息存储在.png文件的元数据中。 我认为这不应该那么难,但事实证明这是一个挑战。

唯一看起来有用的东西是这里的堆栈溢出的帖子。

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

但是,我试图使用提供的代码和提供的网站来做这些事情并没有取得任何成果。

当我尝试使用Iterator时,如下所示,我得到了iw.hasNext()和iw.next()的错误。

错误是:

  • 对于HTMLDocument.Iterator类型,方法hasNext()未定义
  • 类型不匹配:无法从void转换为ImageWriter

    for(Iterator iw =(Iterator)ImageIO.getImageWritersByFormatName(formatName); iw.hasNext;){ImageWriter writer = iw.next();

我的问题是,我从哪里开始,我需要寻找什么? 你知道或者你自己做过这些例子吗?


一个侧面说明我关于“如何在图像中设置DPI信息?”的问题。 这个帖子是......

  1. 为什么当我像他一样使用Iterator时,我会遇到错误?
  2. 什么是“INCH_2_CM”假设是/是?

我改变他的代码的方式如下......


    for (Iterator iw = (Iterator) 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;
    }

您的代码在类javax.swing.text.html.HTMLDocument.Iteratorjava.util.Iterator之间变得混乱。 他的代码使用后者,但你的代码似乎使用前者。 使用完全限定类型,或弄清楚如何修改导入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM