1

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

为了获取图像元数据,我使用了教程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>
4

1 回答 1

2

您使用什么软件为图像添加“标签”?假设它是 Windows 资源管理器。在这种情况下,“标签”可能会存储在以下两个字段中的图像中:
XMP:Subject
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

于 2012-05-04T08:40:38.970 回答