如何从java中的图像元数据中获取标签?

时间:2012-05-04 07:01:02

标签: java image tags

我在文件夹中有一张图片。我手动将标签添加到图像中。我想加载图片并显示其标签。

为了获取图像元数据,我使用了教程http://johnbokma.com/java/obtaining-image-metadata.html

它显示xml,但此xml不包含标记。 xml示例:

Format name: javax_imageio_jpeg_image_1.0
<javax_imageio_jpeg_image_1.0>
    <JPEGvariety/>
    <markerSequence>
        <unknown MarkerTag="225"/>
        <unknown MarkerTag="225"/>
        <dqt>
            <dqtable elementPrecision="0" qtableId="0"/>
        </dqt>
        <dqt>
            <dqtable elementPrecision="0" qtableId="1"/>
        </dqt>
        <sof process="0" samplePrecision="8" numLines="3000" samplesPerLine="4000" numFrameComponents="3">
            <componentSpec componentId="1" HsamplingFactor="2" VsamplingFactor="1" QtableSelector="0"/>
            <componentSpec componentId="2" HsamplingFactor="1" VsamplingFactor="1" QtableSelector="1"/>
            <componentSpec componentId="3" HsamplingFactor="1" VsamplingFactor="1" QtableSelector="1"/>
        </sof>
        <dht>
            <dhtable class="0" htableId="0"/>
        </dht>
        <dht>
            <dhtable class="1" htableId="0"/>
        </dht>
        <dht>
            <dhtable class="0" htableId="1"/>
        </dht>
        <dht>
            <dhtable class="1" htableId="1"/>
        </dht>
        <sos numScanComponents="3" startSpectralSelection="0" endSpectralSelection="63" approxHigh="0" approxLow="0">
            <scanComponentSpec componentSelector="1" dcHuffTable="0" acHuffTable="0"/>
            <scanComponentSpec componentSelector="2" dcHuffTable="1" acHuffTable="1"/>
            <scanComponentSpec componentSelector="3" dcHuffTable="1" acHuffTable="1"/>
        </sos>
    </markerSequence>
</javax_imageio_jpeg_image_1.0>
Format name: javax_imageio_1.0
<javax_imageio_1.0>
    <Chroma>
        <ColorSpaceType name="YCbCr"/>
        <NumChannels value="3"/>
    </Chroma>
    <Compression>
        <CompressionTypeName value="JPEG"/>
        <Lossless value="FALSE"/>
        <NumProgressiveScans value="1"/>
    </Compression>
    <Dimension>
        <ImageOrientation value="normal"/>
    </Dimension>
</javax_imageio_1.0>

1 个答案:

答案 0 :(得分:2)

您使用什么软件为图片添加“标签”?我们假设它是Windows资源管理器。在这种情况下,'标签'可能会存储在这两个字段的图像中:
XMP:主题
XMP:LastKeywordXMP(特别是元素MicrosoftPhoto:LastKeywordXMP)

我不认为默认情况下使用ImageIO.getImageReaders()获取的读者的getImageMetadata方法将返回XMP数据。 (这是您引用的代码正在使用的内容)。

我建议找一个能够满足你需要的开源库或代码。周围似乎有很多,例如http://commons.apache.org/imaging/http://java2s.com/Open-Source/Java/Image/metadata-extractor/com/drew/metadata/xmp/XmpReader.java.htm(注意:我没有尝试过使用此功能)。

如果一切都失败了,你可以使用优秀的ExifTool

这是一个命令行工具,但易于使用。例如,要提取标记: exiftool -XMP:Subject test.jpg