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

时间:2012-05-18 22:52:53

标签: java iterator png stack-overflow dpi

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

唯一看起来有用的东西是堆栈溢出时的以下帖子。

How to set DPI information in an image?

但是,我尝试使用提供的代码和提供的代码来执行此类操作但没有取得任何成果。

当我尝试使用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"假设是/是?
  3. 我改变代码的方式如下......


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

1 个答案:

答案 0 :(得分:2)

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