【问题标题】:Lightroom SQLite database binary XMP formatLightroom SQLite 数据库二进制 XMP 格式
【发布时间】:2020-07-10 00:24:56
【问题描述】:

Lightroom 目录是一个 SQLite 数据库。一些元数据值存储在Adobe_AdditionalMetadata.XMP 列下,这是一种 BLOB 数据类型。

当我保存这个 blob 时,它是一些二进制文件,我不知道如何转换为可编辑表单。

根据documentation,xmp文件是XML格式

Here 是我数据库中此类 blob 的示例

【问题讨论】:

    标签: sqlite reverse-engineering xmp lightroom


    【解决方案1】:

    我在 Lightroom 论坛上被告知,此类列使用非标准 SQLite 压缩模块。

    这里是使用非标准压缩模块重新编译的 SQLite Windows 二进制文件的链接:https://drive.google.com/file/d/1EuSB8SrOA2nAhwTqjI3V1xK44IyxI9gt/view?usp=sharing

    可以提取xmp属性

    select uncompress(xmp) from Adobe_AdditionalMetadata where id_local = 4539794;
    

    但还不能写回来。

    update Adobe_AdditionalMetadata
    set xmp = compress('some valid xmp string value')
    where id_local = 4539794;
    

    它执行成功,但您将无法使用uncompress() 函数将其读回。

    这是因为上面链接中的库只修复了uncompress() 函数。我也在努力修复compress() 函数

    【讨论】:

    • 确保won't be able to read it back 不是'some string value' 不是有效XMP 的结果。此外,non-standard compress 在其他人想要读取您的数据库时自找麻烦:他们可能无法使用外部二进制文件或 Windows。
    • @AmigoJack 显然我没有成功绑定正确的 xmp。非标准压缩不是我的选择,这就是 Lightroom 内部的工作方式
    • 那么您的示例代码不正确,仍然会触发进一步的问题,例如SELECT compress( uncompress( xmp ) )= xmp 是否为 TRUE。
    • @AmigoJack 谢谢,修改后的代码示例更清晰
    • 比以前更糟:现在它与您自己的答案相矛盾 - 您已经知道如何解码 BLOB:使用 uncompress()compress() 的工作方式可能与预期不同吗?
    猜你喜欢
    • 2021-08-02
    • 1970-01-01
    • 2016-04-27
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多