Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取图像的dpi(Java)_Java_Image_Dpi - Fatal编程技术网

如何获取图像的dpi(Java)

如何获取图像的dpi(Java),java,image,dpi,Java,Image,Dpi,在c#中,我们可以使用Image.HorizontalResolution和Image.VerticalResolution 但在java中,如何获得它 我找到了ImageInfo.java,但它只支持几种图像类型 获取您的ImageReader实例。然后使用第一个图像阅读器, 设置输入并读取IIOImage或仅getImageMetadata(pageIndex)。 获取图像格式中立的元数据xml,并为 所需数据 ImageInputStream iis = ImageIO.createIma

在c#中,我们可以使用Image.HorizontalResolution和Image.VerticalResolution

但在java中,如何获得它

我找到了
ImageInfo.java
,但它只支持几种图像类型


获取您的ImageReader实例。然后使用第一个图像阅读器, 设置输入并读取IIOImage或仅getImageMetadata(pageIndex)。 获取图像格式中立的元数据xml,并为 所需数据

ImageInputStream iis = ImageIO.createImageInputStream(in);
Iterator it = ImageIO.getImageReaders(iis);
if (!it.hasNext()) {
System.outprintln("No reader for this format");
}
ImageReader reader = (ImageReader) it.next();
reader.setInput(iis);
IIOMetadata meta = reader.getImageMetadata(0);
IIOMetadataNode dimNode = meta.getStandardDimensionNode();
NodeList nodes = dimNode.getElementsByTagName("HorizontalPixelSize");
IIOMetadataNode dpcWidth = (IIOMetadataNode)nodes.nextElement();
nodes = dimNode.getElementsByTagName("VerticalPixelSize");
IIOMetadataNode dpcHeight = (IIOMetadataNode)nodes.nextElement();
//。。。每厘米计算点到dpi:dpi=dpc/2.54


ImageMagick的全图像中立元数据格式是所有图像相关工作的强大工具。IM需要安装,并且需要对环境进行一些配置,但这是值得的

我建议您使用JMagick wit IM:


我不会解释有关如何的详细信息,因为它是在给定的URL中记录的。

您可以使用Apache Commons Sanselan库获取图像信息:


借助ImageReader实例,您可以获得中性格式的图像元数据,然后根据需要对其进行解析。DTD是

(来源/灵感:)

请注意,只有当dpi存在时,您才会得到它

如果您想知道元数据XML中包含什么,请使用以下代码:

    StringWriter xmlStringWriter = new StringWriter();
    StreamResult streamResult = new StreamResult(xmlStringWriter);
    Transformer transformer = TransformerFactory.newInstance().newTransformer();
    transformer.setOutputProperty(OutputKeys.INDENT, "yes"); // http://stackoverflow.com/a/1264872/535646
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
    DOMSource domSource = new DOMSource(root);
    transformer.transform(domSource, streamResult);
    System.out.println (xmlStringWriter);

我发现这个例子很有趣:

ByteArrayInputStream bis = new 
   ByteArrayInputStream(uploadedFile.getContents());
Iterator<?> readers = ImageIO.getImageReadersByFormatName("jpg");
ImageReader reader = (ImageReader) readers.next();
IIOMetadata meta = reader.getImageMetadata(0);
Element tree = (Element) meta.getAsTree("javax_imageio_jpeg_image_1.0");
Element jfif = (Element)tree.getElementsByTagName("app0JFIF").item(0);
int dpiH = Integer.parseInt( jfif.getAttribute("Xdensity") );
int dpiV = Integer.parseInt( jfif.getAttribute("Ydensity") );

/* now test that (dpiH == dpiV) */
/* imports are:
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.stream.ImageInputStream;
import org.primefaces.model.UploadedFile;
import org.w3c.dom.Element;
*/
ByteArrayInputStream bis=new
ByteArrayInputStream(uploadedFile.getContents());
迭代器阅读器=ImageIO.getImageReadersByFormatName(“jpg”);
ImageReader=(ImageReader)readers.next();
IIOMetadata meta=reader.getImageMetadata(0);
元素树=(元素)meta.getAsTree(“javax_imageio_jpeg_image_1.0”);
Element jfif=(Element)tree.getElementsByTagName(“app0JFIF”).item(0);
int dpiH=Integer.parseInt(jfif.getAttribute(“Xdensity”);
intdpiv=Integer.parseInt(jfif.getAttribute(“Ydensity”);
/*现在测试(dpiH==dpiV)*/
/*进口产品包括:
导入javax.imageio.imageio;
导入javax.imageio.ImageReadParam;
导入javax.imageio.ImageReader;
导入javax.imageio.metadata.iimetadata;
导入javax.imageio.stream.ImageInputStream;
导入org.primefaces.model.UploadedFile;
导入org.w3c.dom.Element;
*/
它对我有用

 try {

        final ImageInfo imageInfo = Sanselan.getImageInfo(new File("C:/Users/AngryMan/Desktop/abc.png"));
        final int physicalWidthDpi = imageInfo.getPhysicalWidthDpi();
        final int physicalHeightDpi = imageInfo.getPhysicalHeightDpi();
        System.out.println("physicalWidthDpi :"+physicalWidthDpi );
        System.out.println("physicalHeightDpi : "+physicalHeightDpi);

    } catch (Exception e) {
        e.printStackTrace();
    }
Maven Dependency

 <!-- https://mvnrepository.com/artifact/org.apache.sanselan/sanselan -->
    <dependency>
        <groupId>org.apache.sanselan</groupId>
        <artifactId>sanselan</artifactId>
        <version>0.97-incubator</version>
    </dependency>

org.apache.sanselan
梵语
0.97-培养箱

查找.bmp图像的dpi使用:

import com.lowagie.text.Image.

    public class BitmapResolution {
        public static void main(String args[]) {
            try {
                Image img = Image.getInstance("C:/Users/AngryMan/Desktop/img003.bmp");
                System.out.println(img.getDpiX());
                System.out.println(img.getDpiY());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
Maven依赖项:

        <!-- https://mvnrepository.com/artifact/com.lowagie/itext -->
        <dependency>
            <groupId>com.lowagie</groupId>
            <artifactId>itext</artifactId>
            <version>2.1.7</version>
        </dependency>     

com.lowagie
文字
2.1.7

类型IIOmeAdata中的方法getStandardDimensionNode()不可见类型NodeList中的方法nextElement()未定义这是一篇相当古老的论坛帖子中的代码-它不再有效。我进行了编辑,以便它现在可以工作;或者,由于某种原因(可能是审稿人没有正确阅读),您的编辑被拒绝。我建议添加一个新的答案。您使用的是什么图像类型?我需要能够支持所有图像类型的解决方案。对于所有纯java解决方案来说,这绝对不值得麻烦
import com.lowagie.text.Image.

    public class BitmapResolution {
        public static void main(String args[]) {
            try {
                Image img = Image.getInstance("C:/Users/AngryMan/Desktop/img003.bmp");
                System.out.println(img.getDpiX());
                System.out.println(img.getDpiY());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
        <!-- https://mvnrepository.com/artifact/com.lowagie/itext -->
        <dependency>
            <groupId>com.lowagie</groupId>
            <artifactId>itext</artifactId>
            <version>2.1.7</version>
        </dependency>