Java 从photoshop文件读取DPI

Java 从photoshop文件读取DPI,java,dpi,imaging,psd,twelvemonkeys,Java,Dpi,Imaging,Psd,Twelvemonkeys,我正试图用JAVA从PSD文件中读取DPI。我正在使用ImageIO(包括TwelveMonkeys扩展)和/或Apache Commons Imaging。不幸的是,无法管理它(JPG、PNG和TIFF工作正常) 以下是来自photoshop的文件信息: <?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP C

我正试图用JAVA从PSD文件中读取DPI。我正在使用ImageIO(包括TwelveMonkeys扩展)和/或Apache Commons Imaging。不幸的是,无法管理它(JPG、PNG和TIFF工作正常)

以下是来自photoshop的文件信息:

    <?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27        ">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:xmp="http://ns.adobe.com/xap/1.0/">
         <xmp:CreatorTool>Adobe Photoshop CS6 (Macintosh)</xmp:CreatorTool>
         <xmp:CreateDate>2017-05-18T10:47:41+02:00</xmp:CreateDate>
         <xmp:MetadataDate>2017-05-18T11:17:54+02:00</xmp:MetadataDate>
         <xmp:ModifyDate>2017-05-18T11:17:54+02:00</xmp:ModifyDate>
      </rdf:Description>
      <rdf:Description rdf:about=""
            xmlns:dc="http://purl.org/dc/elements/1.1/">
         <dc:format>application/vnd.adobe.photoshop</dc:format>
      </rdf:Description>
      <rdf:Description rdf:about=""
            xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
            xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#">
         <xmpMM:InstanceID>xmp.iid:96F5C1320B206811822AAF07DD778819</xmpMM:InstanceID>
         <xmpMM:DocumentID>xmp.did:0180117407206811822AAF07DD778819</xmpMM:DocumentID>
         <xmpMM:OriginalDocumentID>xmp.did:0180117407206811822AAF07DD778819</xmpMM:OriginalDocumentID>
         <xmpMM:History>
            <rdf:Seq>
               <rdf:li rdf:parseType="Resource">
                  <stEvt:action>created</stEvt:action>
                  <stEvt:instanceID>xmp.iid:0180117407206811822AAF07DD778819</stEvt:instanceID>
                  <stEvt:when>2017-05-18T10:47:41+02:00</stEvt:when>
                  <stEvt:softwareAgent>Adobe Photoshop CS6 (Macintosh)</stEvt:softwareAgent>
               </rdf:li>
               <rdf:li rdf:parseType="Resource">
                  <stEvt:action>saved</stEvt:action>
                  <stEvt:instanceID>xmp.iid:0280117407206811822AAF07DD778819</stEvt:instanceID>
                  <stEvt:when>2017-05-18T10:48:03+02:00</stEvt:when>
                  <stEvt:softwareAgent>Adobe Photoshop CS6 (Macintosh)</stEvt:softwareAgent>
                  <stEvt:changed>/</stEvt:changed>
               </rdf:li>
               <rdf:li rdf:parseType="Resource">
                  <stEvt:action>saved</stEvt:action>
                  <stEvt:instanceID>xmp.iid:96F5C1320B206811822AAF07DD778819</stEvt:instanceID>
                  <stEvt:when>2017-05-18T11:17:54+02:00</stEvt:when>
                  <stEvt:softwareAgent>Adobe Photoshop CS6 (Macintosh)</stEvt:softwareAgent>
                  <stEvt:changed>/</stEvt:changed>
               </rdf:li>
            </rdf:Seq>
         </xmpMM:History>
      </rdf:Description>
      <rdf:Description rdf:about=""
            xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">
         <photoshop:ColorMode>3</photoshop:ColorMode>
         <photoshop:ICCProfile>sRGB IEC61966-2.1</photoshop:ICCProfile>
         <photoshop:TextLayers>
            <rdf:Bag>
               <rdf:li rdf:parseType="Resource">
                  <photoshop:LayerName>OK PSD 2557x2200px 150dpi RGB</photoshop:LayerName>
                  <photoshop:LayerText>OK PSD 2557x2200px 150dpi RGB</photoshop:LayerText>
               </rdf:li>
            </rdf:Bag>
         </photoshop:TextLayers>
      </rdf:Description>
      <rdf:Description rdf:about=""
            xmlns:tiff="http://ns.adobe.com/tiff/1.0/">
         <tiff:Orientation>1</tiff:Orientation>
         <tiff:XResolution>1500000/10000</tiff:XResolution>
         <tiff:YResolution>1500000/10000</tiff:YResolution>
         <tiff:ResolutionUnit>2</tiff:ResolutionUnit>
      </rdf:Description>
      <rdf:Description rdf:about=""
            xmlns:exif="http://ns.adobe.com/exif/1.0/">
         <exif:ColorSpace>1</exif:ColorSpace>
         <exif:PixelXDimension>2557</exif:PixelXDimension>
         <exif:PixelYDimension>2200</exif:PixelYDimension>
      </rdf:Description>
   </rdf:RDF>
</x:xmpmeta>

thx

没有任何读取psd文件的免费工具(psd不是专门为之设计的)。@rome使用上面的代码,你得到了什么维度?请注意,TwelveMonkeys
PSDImageReader
从PSD ResolutionInfo结构获取其维度元数据,而不是XMP元数据(但这些元数据应该是同步的)。@ElliottFrisch我相信你错了:。还有其他的。我同意这不是文件交换的最佳选择@haraldK此代码从其他文件类型读取信息。我试着得到“水平像素大小”。它应该是一条链子。如果一种方法不成功,请尝试另一种方法。。。你能告诉我正确的方法是什么吗?@rome Ouch。。原来在
PSDMetadata
类中有一个愚蠢的bug,它阻止了ResolutionInfo被报告…:-(虽然很容易修复。请您在中报告这是一个bug好吗?您的代码很好。没有任何免费的工具来读取psd文件(psd不是为您设计的)@rome使用上面的代码可以得到什么维度?请注意,TwelveMonkeys
PSDImageReader
从PSD ResolutionInfo结构获取维度元数据,而不是XMP元数据(但这些元数据应该是同步的)@ElliottFrisch我相信你错了:。还有其他的。我同意这不是文件交换的最佳选择。;-@haraldK此代码从其他文件类型读取信息。我试着得到“水平像素大小”。它应该是一条链子。如果一种方法不成功,请尝试另一种方法。。。你能告诉我正确的方法是什么吗?@rome Ouch。。原来在
PSDMetadata
类中有一个愚蠢的bug,它阻止了ResolutionInfo被报告…:-(不过修复起来很容易。请在中报告这是一个bug好吗?您的代码很好。
<tiff:XResolution>1500000/10000</tiff:XResolution>
<tiff:YResolution>1500000/10000</tiff:YResolution>
final IIOMetadata metadata = reader.get().getImageMetadata(0);
final IIOMetadataNode standardTree = (IIOMetadataNode) metadata.getAsTree(IIOMetadataFormatImpl.standardMetadataFormatName);
final IIOMetadataNode dimension = (IIOMetadataNode) standardTree.getElementsByTagName("Dimension").item(0);