我正在尝试编辑 JPG 文件(iPhone 创建的 Live Photo 的静态图像)的自定义元数据值。尝试了 exiftool 但它对我不起作用。
作为参考,这是其中一个文件的元数据 - https://www.metadata2go.com/result/93287b28-1c16-4491-affe-8ffbd6d9dd1a
我要编辑和更新的字段是
内容标识符 DF64C2AE-ED3C-4778-BFCA-C15277E521D2
我尝试使用 exiftool 更新该字段
exiftool -ContentIdentifier=5A0FFB8D-5410-4464-A343-61AE4A6C1109 LW16.jpg
它总是抛出错误,例如文件无法读取或警告:标签“ContentIdentifier”未定义 没什么可做的。
任何人都可以帮助我解决这个问题或指导我使用另一种方法来更改值?
我正在像这样使用little_exif将原始MakerNote写入exif数据,它现在正在工作:)我正在尝试处理视频部分
use std::{
fs,
path::{Path, PathBuf},
};
use little_exif::{exif_tag, metadata::Metadata};
pub fn generate_binding() -> (String, Vec<u8>) {
let uuid: String = uuid::Uuid::new_v4().into();
let mut note:Vec<u8> = b"Apple iOS\x00\x00\x01MM\x00\x01\x00\x11\x00\x02\x00\x00\x00\x25\x00\x00\x00\x20\x00\x00\x00\x00".to_vec();
// let note = header + uuid.as_bytes().to_vec() + vec![b"\x00\x00\x00\x00"];
note.extend(uuid.as_bytes().to_vec());
note.extend(b"\x00".to_vec());
(uuid, note)
}
pub fn generate_live_photo(
jpeg_src: &Path,
mov_src: &Path,
dest_dir: Option<&Path>,
) -> Option<(PathBuf, PathBuf)> {
let (uuid, note) = generate_binding();
let (jpeg, mov) = match dest_dir {
Some(dest_dir) => {
let (jpeg, mov) = (
Path::new(dest_dir).join(match jpeg_src.file_name() {
Some(src) => src,
None => return None,
}),
Path::new(dest_dir).join(format!("{}.mov",uuid.to_uppercase())),
);
//copy files
fs::copy(jpeg_src, &jpeg).unwrap();
fs::copy(mov_src, &mov).unwrap();
(jpeg, mov)
}
None => (jpeg_src.to_path_buf(), mov_src.join(uuid)),
};
let mut metadata = match Metadata::new_from_path(&jpeg) {
Ok(data) => data,
Err(_) => return None,
};
metadata.set_tag(exif_tag::ExifTag::MakerNote(note));
match metadata.write_to_file(&jpeg) {
Ok(_) => {}
Err(_) => {
return None;
}
};
Some((jpeg, mov))
}