Java 如何读取/写入用户定义的照片主题标签

Java 如何读取/写入用户定义的照片主题标签,java,android,image,metadata,jpeg,Java,Android,Image,Metadata,Jpeg,嗨,我对安卓系统比较陌生,在过去的几天里一直搜索到头痛(该喝杯咖啡了)。像digiKam(Linux)这样的PC程序允许你用关键词标记照片。您可以稍后在这些图像中搜索这些关键字中的匹配项 我已经看过了,它可以将这些类型的标签读取到照片中的XMP或IPTC目录中 有没有人能举一个简单的例子来说明如何做到这一点?我只是对标签的读/写感兴趣,因为搜索是相对直接的 提前谢谢好的,喝了一杯好咖啡后,经过一点尝试和错误,我找到了答案 要使用元数据提取器从隐藏在图像元数据中的Xmp目录中读取标记,我使用了以下

嗨,我对安卓系统比较陌生,在过去的几天里一直搜索到头痛(该喝杯咖啡了)。像digiKam(Linux)这样的PC程序允许你用关键词标记照片。您可以稍后在这些图像中搜索这些关键字中的匹配项

我已经看过了,它可以将这些类型的标签读取到照片中的XMP或IPTC目录中

有没有人能举一个简单的例子来说明如何做到这一点?我只是对标签的读/写感兴趣,因为搜索是相对直接的


提前谢谢

好的,喝了一杯好咖啡后,经过一点尝试和错误,我找到了答案

要使用元数据提取器从隐藏在图像元数据中的Xmp目录中读取标记,我使用了以下代码

private void metadataMetaEx (File jpegFile)
{

    Metadata metadata = null;
    String tagInfo = null;
    XmpDirectory xmpDirectory = null;
    Map<String, String> xmp = null; 

    // Get all the metadata of the file
    try {
        metadata = ImageMetadataReader.readMetadata(jpegFile);
    } catch (ImageProcessingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    // Read in the metadata of the xmp directory
    try
    {
        xmpDirectory = metadata.getDirectory(XmpDirectory.class);
    } catch (NullPointerException e)
    {
        e.printStackTrace();
    }

    // Look through the xmp metadata for keys containing the word "Subject" and if a match add the value to the variable tagInfo
    if (xmpDirectory != null)
    {
        xmp = xmpDirectory.getXmpProperties();
        Iterator tags = xmp.keySet().iterator();
        tagInfo = "Image Tags: ";           
        while (tags.hasNext())
        {
            String key=(String)tags.next();

            if (key.contains("Subject"))
            {
                String value=(String)xmp.get(key);
                tagInfo += value
                        += "; ";                    
            }

        }           
    } }
private void metadataMetaEx(文件jpegFile)
{
元数据=null;
字符串tagInfo=null;
XmpDirectory XmpDirectory=null;
Map xmp=null;
//获取文件的所有元数据
试一试{
元数据=ImageMetadataReader.readMetadata(JPEG文件);
}捕获(ImageProcessingException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
//读入xmp目录的元数据
尝试
{
xmpDirectory=metadata.getDirectory(xmpDirectory.class);
}捕获(NullPointerException e)
{
e、 printStackTrace();
}
//查看xmp元数据中包含单词“Subject”的键,如果匹配,则将该值添加到变量tagInfo中
if(xmpDirectory!=null)
{
xmp=xmpDirectory.getXmpProperties();
迭代器标记=xmp.keySet().Iterator();
tagInfo=“图像标签:”;
while(tags.hasNext())
{
字符串键=(字符串)标记。下一步();
if(键包含(“主题”))
{
字符串值=(字符串)xmp.get(键);
tagInfo+=值
+= "; ";                    
}
}           
} }
这将把所有标记放在字符串变量infoTag中,您可以在其他地方使用它