我理解.AAE文件应该描述应用于某张图片的更改。然而,我看到大多数时候(显然并不总是)有这样的文件,即使它们似乎携带相同的数据(这似乎表明没有更改应用于图片)。
有人知道如何解码这个adjustmentData值吗?
示例照片1:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>adjustmentBaseVersion</key>
<integer>0</integer>
<key>adjustmentData</key>
<data>
bZBNT8JAEIb/y5wrKaBg9mbwIBdJNNGD8TC003bNfjS7U5CQ/nenW0o4eNt95+t9nzNY
YiyREdQZLEam8EK6bhjUfb5cZBftU5fcgFosVo8Z+KDJMbL2DtSqz6DywSJ/UIhJmmdw
GN9bV/lh8b7Tpnzt7J4CKJivnx9yyADb9joD8o9FQxbf6KBHLc+gNcjDdmnQu3eQW1j+
dJGtGIigvs7/3CaHe0MlKA4dyVZi1q6Og48THtNaSVBrh2YTfDv1/e6SmOrRYhACFZoo
leMYfuRxmtqWa0EROeBAi9yTqw2BupNp7Nhfh5sLzRFd4V0acTxRzm/FC+YhuOZieEli
XUpYXenELjmeiG9vK4W3MyFqaNY2Xgz03/0f
</data>
<key>adjustmentEditorBundleID</key>
<string>com.apple.camera</string>
<key>adjustmentFormatIdentifier</key>
<string>com.apple.photo</string>
<key>adjustmentFormatVersion</key>
<string>1.6</string>
<key>adjustmentTimestamp</key>
<date>2020-03-21T17:37:31Z</date>
</dict>
</plist>
示例照片2:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>adjustmentBaseVersion</key>
<integer>0</integer>
<key>adjustmentData</key>
<data>
bZBNT8JAEIb/y5wrKaBg9mbwIBdJNNGD8TC003bNfjS7U5CQ/nenW0o4eNt95+t9nzNY
YiyREdQZLEam8EK6bhjUfb5cZBftU5fcgFosVo8Z+KDJMbL2DtSqz6DywSJ/UIhJmmdw
GN9bV/lh8b7Tpnzt7J4CKJivnx9yyADb9joD8o9FQxbf6KBHLc+gNcjDdmnQu3eQW1j+
dJGtGIigvs7/3CaHe0MlKA4dyVZi1q6Og48THtNaSVBrh2YTfDv1/e6SmOrRYhACFZoo
leMYfuRxmtqWa0EROeBAi9yTqw2BupNp7Nhfh5sLzRFd4V0acTxRzm/FC+YhuOZieEli
XUpYXenELjmeiG9vK4W3MyFqaNY2Xgz03/0f
</data>
<key>adjustmentEditorBundleID</key>
<string>com.apple.camera</string>
<key>adjustmentFormatIdentifier</key>
<string>com.apple.photo</string>
<key>adjustmentFormatVersion</key>
<string>1.6</string>
<key>adjustmentTimestamp</key>
<date>2020-03-25T05:45:21Z</date>
</dict>
</plist>
3条答案
按热度按时间2g32fytz1#
不幸的是,这还不是一个完整的答案。它可能会帮助一些人,但有更多的东西,我不明白。
我找到的最有用的答案来自http://rae.tnir.org/archives/2016/02/data-inside-apples-aae-files,他获取
data
属性的内容,并通过base64解码器运行,然后得到一个二进制plist,他将其转换为与照片慢动作设置相关的可理解的XML。让我们做得更详细些。
从他的
adjustmentData
信息开始:我们将对
data
值进行base64解码。空格和换行符似乎并不重要。使用https://www.opinionatedgeek.com/codecs/base64decoder是因为我们希望保存结果,因为它本身是二进制的,而只显示文本结果的转换器将无法正确地呈现它。复制data
字段(YnBs.....AAI0=
),解码它,然后下载生成的文件。注意,它以bplist
开头,表示它是一个在Apple生态系统中使用的二进制plist。现在我们需要解码二进制plist。他没有解释怎么做,但其他网站声称你可以在TextMate中打开它,它知道如何显示它。确实如此。苹果在上面的评论中的另一个建议是运行
plutil -convert xml1 TheDownloadedFile
。并将文件从二进制版本就地修改为XML版本。(这两种方法在我借来测试的Mac上似乎都能用。)不过我用的是Windows,这两种方法都没有用。不过我还是找到了一个适用于Notepad的Notepad++ bplist plugin。Notepad显示的最终结果是另见decoding data from plist file。The writeup链接在一个评论中也很有帮助。他的plist不是一个AAE图像,但同样的过程工作。我会怀疑它会为任何
plist
。除了你还有我我不知道为什么。
此原始问题中的
adjustmentData
data
值未解码为以bplist
开头的内容。相同的解码器(https://www.opinionatedgeek.com/codecs/base64decoder)将其解码为:我在其他解码器上没有比这更成功的了,也没有比这更乱的空格了。我在AAE上也遇到了同样的问题,正是这个问题让我自己陷入了困境。我注意到,你我都有
data
,其中包含频繁的/
字符,而我链接的两个成功故事却没有。对我来说,它们“感觉”像是不同的编码,但我不是编码Maven。我也有点怀疑原始AAE中的
adjustmentFormatVersion
。工作示例早在1.1上。我们的是1.4和1.6。我想知道内容是否曾经是二进制plist,但现在不再是了。6qfn3psc2#
adjustmentData是JSON字符串,先用zlib压缩,然后用base64编码。我自己没有弄清楚,ojchase指向base64编码,然后我在www.example.com找到了其余https://github.com/neilpa/photohack/issues/4#issuecomment-780872343https://github.com/RhetTbull/osxphotos/issues/384告诉我,在某些情况下,格式是不同的,但目前我没有任何例子可以检查。
我使用python来解码adjustmentData,因为我发现它有一些相关的库:
代码在Windows 10上使用Python 3.9.12进行了测试。使用iPhone SE(第2代)iOS版本16.1.1中的AAE文件进行了测试,但脚本包含pjp中的adjustmentData来回答问题。两个示例AAE文件都包含相同的adjustmentData。
输出为:
其他经验:
adjustmentRenderTypes
xml PropertyList键IMG_<number>.HEIC
和IMG_E<number>.HEIC
。第一个是原始的4:3图像,第二个似乎应用了AAE编辑。Screenshot of File Explorer
8yparm6h3#
adjustmentData
可能是Apple's PhotoKit documentation中提到的特定于应用的边车数据:此对象提供应用程序定义的“配方”,您可以使用它来重建编辑。
编辑资源时,“照片”会存储一个PHAdjustmentData对象,该对象由编辑资源的应用(或扩展)提供。此对象提供使用资源内容的以前版本重建已编辑资源所需的任何信息。当用户尝试使用您的扩展编辑资源时,“照片”会调用此块以了解您的扩展是否可以处理资源的过去调整。
由于这是特定于应用程序的数据,并且现在是高度编码的(不再只是二进制plist),我猜想它是某种归档的NSData对象(示例custom implementation),但是,如果不知道字节Map到什么(Photos.app编码器做什么,需要任何枚举),我们可能无法进一步解码这些数据。(我的系统上有版本为1.8的AAE文件,以供参考。)
截至iOS 8(2014),这些都是probably easily-decodable。如果我们曾经 * 做 * 找到或反向工程一些参考代码(从Photos.app或其他),应该很容易编码到一个.swift shell 脚本的信息。