You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取.lrcat中Adobe_AdditionalMetadata表XMP数据解码失败求助

解码Lightroom .lrcat数据库中Adobe_AdditionalMetadata表的xmp列数据

我用Python结合sqlite3读取.lrcat数据时,遇到Adobe_AdditionalMetadata表的xmp列编码特殊,推测是Adobe Lightroom专属编码。尝试用decode('utf-8')和字节转字符串都失败了,也没找到用exiftool直接解码该字段的方法——它只能读取XMP文件而非数据库字段。想知道可行的解决思路,是否可以借助LR API处理?

我的代码片段:

from libxmp import XMPFiles

cursor = conn.execute('SELECT xmp FROM Adobe_AdditionalMetadata')
row = cursor.fetchone()
xmp_data = row[0]

xmp_data.decode('utf-8')

可行解决思路

  • 解析LR专属的XMP封装格式
    Lightroom在数据库里存储的XMP并非原始UTF-8字符串,而是做了ZLIB压缩+二进制封装。你可以尝试先对xmp_data做ZLIB解压:

    import zlib
    
    # LR存储的压缩数据通常带4字节的长度头部,需跳过
    compressed_data = xmp_data[4:]
    decompressed_xmp = zlib.decompress(compressed_data).decode('utf-8')
    

    解压后得到标准XMP字符串,即可用libxmp正常解析。

  • 借助Lightroom Classic SDK/API
    若需要官方合规的处理方式,可使用Adobe Lightroom Classic SDK:

    • SDK提供直接访问LR数据库元数据的接口,能自动处理XMP的编码和解码
    • 可编写LR插件,通过插件API读取目标XMP数据后导出给Python脚本使用
  • 用exiftool间接处理
    虽然exiftool不能直接读取数据库字段,但可以曲线实现:

    • 将数据库取出的xmp字节流写入临时文件(保留LR的封装格式)
    • 调用exiftool读取该临时文件,它会自动识别LR的XMP封装并解析
    • 从exiftool的输出中提取所需元数据

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 23:47:57