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

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

最佳答案

您使用什么软件在图像上添加了“标签”?假设它是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

关于java - 如何从Java中的图像元数据获取标签?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10444206/

10-09 05:18