我正在尝试使用Java在Photoshop中将关键字添加到PNG图像文件中。
我在Java中使用imageio尝试了这个方法:
http://johnbokma.com/java/obtaining-image-metadata.html
但是,我得到的是以下内容:
Format name: javax_imageio_png_1.0
<javax_imageio_png_1.0>
<IHDR width="128" height="128" bitDepth="8" colorType="RGBAlpha" compressionMethod="deflate" filterMethod="adaptive" interlaceMethod="none"/>
<cHRM whitePointX="31269" whitePointY="32899" redX="63999" redY="33001" greenX="30000" greenY="60000" blueX="15000" blueY="5999"/>
<iCCP profileName="Photoshop ICC profile" compressionMethod="deflate"/>
<pHYs pixelsPerUnitXAxis="2835" pixelsPerUnitYAxis="2835" unitSpecifier="meter"/>
</javax_imageio_png_1.0>
Format name: javax_imageio_1.0
<javax_imageio_1.0>
<Chroma>
<ColorSpaceType name="RGB"/>
<NumChannels value="4"/>
<BlackIsZero value="TRUE"/>
</Chroma>
<Compression>
<CompressionTypeName value="deflate"/>
<Lossless value="TRUE"/>
<NumProgressiveScans value="1"/>
</Compression>
<Data>
<PlanarConfiguration value="PixelInterleaved"/>
<SampleFormat value="UnsignedIntegral"/>
<BitsPerSample value="8 8 8 8"/>
</Data>
<Dimension>
<PixelAspectRatio value="1.0"/>
<ImageOrientation value="Normal"/>
<HorizontalPixelSize value="0.35273367"/>
<VerticalPixelSize value="0.35273367"/>
</Dimension>
<Transparency>
<Alpha value="nonpremultipled"/>
</Transparency>
</javax_imageio_1.0>
没有关于添加关键字的内容......
我做得不对吗?此库是否未获取XMP元数据?
编辑:
虽然我更愿意知道标准库是否可以读取元数据,但我尝试了pngj库。但这给了我以下错误:
Exception in thread "main" ar.com.hjg.pngj.PngjExceptionInternal: this should not happen
at ar.com.hjg.pngj.PngIDatChunkInputStream.read(PngIDatChunkInputStream.java:117)
at ar.com.hjg.pngj.PngReader.readSkippingAllRows(PngReader.java:777)
at se.expertinfo.ditaplugin.ImageMetadata.showChunks(ImageMetadata.java:105)
at se.expertinfo.ditaplugin.DitaPlugin.printImageMetadata(DitaPlugin.java:33)
at se.expertinfo.ditaplugin.DitaPlugin.main(DitaPlugin.java:24)
Java Result: 1
如果我注释掉pngr.readSkippingAllRows(); (我可能知道这个方法没用吗?)我得到以下结果:
filename=architecture3.png ImageInfo [cols=128, rows=128, bitDepth=8, channels=4, bitspPixel=32, bytesPixel=4, bytesPerRow=512, samplesPerRow=512, samplesPerRowP=512, alpha=true, greyscale=false, indexed=false, packed=false]
ChunkList: read: 5
Read:
chunk id= IHDR (len=13 offset=8) c=PngChunkIHDR G=0
chunk id= pHYs (len=9 offset=33) c=PngChunkPHYS G=1
chunk id= iCCP (len=2639 offset=54) c=PngChunkICCP G=1
chunk id= cHRM (len=32 offset=2705) c=PngChunkCHRM G=1
chunk id= IDAT (len=25329 offset=2749) c=PngChunkIDAT G=4
BUILD SUCCESSFUL (total time: 0 seconds)
即。没有关于那里的关键词...
BTW:这是Photoshop中设置的元数据。 IPTC标签下会显示相同的元数据......
编辑2: 回应leonbloy:
添加了标题和作者,但仍然没有输出(尽管获得IEND):
filename = architecture3.png ImageInfo [cols = 128,rows = 128,bitDepth = 8,channels = 4,bitspPixel = 32,bytesPixel = 4,bytesPerRow = 512,samplesPerRow = 512,samplesPerRowP = 512,alpha = true, greyscale = false,indexed = false,packed = false] ChunkList:读取:6 读: chunk id = IHDR(len = 13 offset = 8)c = PngChunkIHDR G = 0 chunk id = pHYs(len = 9 offset = 33)c = PngChunkPHYS G = 1 块id = iCCP(len = 2639 offset = 54)c = PngChunkICCP G = 1 chunk id = cHRM(len = 32 offset = 2705)c = PngChunkCHRM G = 1 chunk id = IDAT(len = 25329 offset = 2749)c = PngChunkIDAT G = 4 chunk id = IEND(len = 0 offset = 28090)c = PngChunkIEND G = 6
我可以在Adobe Bridge中看到添加的元数据......
编辑3:
嗯,我没有解释,但突然javax.imageio库工作正常!我按预期获得了所有元数据,我甚至不知道对它进行任何更改。
我只是缺少一件事 - 我本来希望能够获得键/值对中的元数据,例如Product = Apple,但我似乎无法找到任何添加元数据的方法。这是以某种方式提供的,我将如何实现?