计算原始图像数据的哈希值并将其写入图像文件
Calculating hashes of raw image data and writing it to the image file
我正在尝试将哈希值写入图像文件的元数据部分。在 Exiftool Forum 我看到了这个
exiftool FILE -rawimagedigest=`exiftool FILE -all= -o - | md5`
但是,我不想运行为每个文件手动设置它,我更喜欢 SHA。
我试过了
find . -name "*" -exec sh -c '
md5hash=$(exiftool "" -all= -m -o - | md5)
sha256hash=$(exiftool "" -all= -m -o - | shasum -a 256)
exiftool -overwrite_original "" -FileImageMd5=$md5hash;
exiftool -overwrite_original "" -FileImageSha256=$sha256hash
' _ {} \;
使用 example file 我创建了一个配置,可以写入 FileImageMd5 和 FileImageSha256。但是,该脚本只能在没有
行的情况下工作
exiftool -overwrite_original "" -FileImageSha256=$sha256hash
如果我用 $md5hash 替换最后的变量,它会按预期 运行s。
配置文件名为 .ExifTool_config 并放置在 $HOME 中。它由以下组成
%Image::ExifTool::UserDefined = (
'Image::ExifTool::XMP::Main' => {
rlp => {
SubDirectory => {
TagTable => 'Image::ExifTool::UserDefined::rlp',
},
},
},
);
%Image::ExifTool::UserDefined::rlp = (
GROUPS => { 0 => 'XMP', 1 => 'XMP-rlp', 2 => 'Image' },
NAMESPACE => { 'rlp' => 'http://ns.ladekjaer.org/rlp/1.0/' },
WRITABLE => 'string',
FileUniqueId => { Writable => 'lang-alt' },
FileImageSha256 => { Writable => 'lang-alt' },
FileImageMd5 => { Writable => 'lang-alt' },
);
1; #end
显然由于
脚本失败
shasum -a 256
以
结束输出
-
由于用十六进制写的 SHA256 总是 64 个字符,是否可以通过添加
来解决这个问题
| head -c 64
从而制作脚本
find . -name "*" -exec sh -c '
md5hash=$(exiftool "" -q -all= -m -o - | md5)
sha256hash=$(exiftool "" -q -all= -m -o - | shasum -a 256 | head -c 64)
exiftool -overwrite_original -q "" -FileImageMd5=$md5hash;
exiftool -overwrite_original -q "" -FileImageSha256=$sha256hash
' _ {} \;
我正在尝试将哈希值写入图像文件的元数据部分。在 Exiftool Forum 我看到了这个
exiftool FILE -rawimagedigest=`exiftool FILE -all= -o - | md5`
但是,我不想运行为每个文件手动设置它,我更喜欢 SHA。
我试过了
find . -name "*" -exec sh -c '
md5hash=$(exiftool "" -all= -m -o - | md5)
sha256hash=$(exiftool "" -all= -m -o - | shasum -a 256)
exiftool -overwrite_original "" -FileImageMd5=$md5hash;
exiftool -overwrite_original "" -FileImageSha256=$sha256hash
' _ {} \;
使用 example file 我创建了一个配置,可以写入 FileImageMd5 和 FileImageSha256。但是,该脚本只能在没有
行的情况下工作exiftool -overwrite_original "" -FileImageSha256=$sha256hash
如果我用 $md5hash 替换最后的变量,它会按预期 运行s。
配置文件名为 .ExifTool_config 并放置在 $HOME 中。它由以下组成
%Image::ExifTool::UserDefined = (
'Image::ExifTool::XMP::Main' => {
rlp => {
SubDirectory => {
TagTable => 'Image::ExifTool::UserDefined::rlp',
},
},
},
);
%Image::ExifTool::UserDefined::rlp = (
GROUPS => { 0 => 'XMP', 1 => 'XMP-rlp', 2 => 'Image' },
NAMESPACE => { 'rlp' => 'http://ns.ladekjaer.org/rlp/1.0/' },
WRITABLE => 'string',
FileUniqueId => { Writable => 'lang-alt' },
FileImageSha256 => { Writable => 'lang-alt' },
FileImageMd5 => { Writable => 'lang-alt' },
);
1; #end
显然由于
脚本失败shasum -a 256
以
结束输出 -
由于用十六进制写的 SHA256 总是 64 个字符,是否可以通过添加
来解决这个问题 | head -c 64
从而制作脚本
find . -name "*" -exec sh -c '
md5hash=$(exiftool "" -q -all= -m -o - | md5)
sha256hash=$(exiftool "" -q -all= -m -o - | shasum -a 256 | head -c 64)
exiftool -overwrite_original -q "" -FileImageMd5=$md5hash;
exiftool -overwrite_original -q "" -FileImageSha256=$sha256hash
' _ {} \;