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
相关产品推荐
相关产品推荐

