我使用Magick.NET库来读取 exif 值。为了获得最高性能,我正在使用Ping
方法(请参阅this),因为在处理某些图像元数据时我不需要实际的图像内容。
但是现在如果这个值不存在,我需要写 exif 标签值。我正在尝试做的事情:
public static void Test()
{
var path = @"C:\image.jpg";
using (var image = new MagickImage())
{
image.Ping(path);
var profile = image.GetExifProfile();
var copyright = profile.Values.FirstOrDefault(x => x.Tag == ExifTag.Copyright);
if (copyright != null)
{
Trace.WriteLine("Copyright: " + copyright);
}
else
{
Trace.WriteLine("Write Copyright data");
profile.SetValue(ExifTag.Copyright, "Example text");
image.AddProfile(profile, true);
image.Write(path);
}
}
}
但是这段代码没有将标签值写入 exif。我可以在以另一种方式打开文件时成功写入标签值(如在此答案中):
var path = @"C:\image.jpg";
// Read image with content
using (var image = new MagickImage(path))
{
// image.Ping(path) - no more need
var profile = image.GetExifProfile();
...
}
但是这个解码整个图像内容,我不需要它来改变“内容独立”标签的值,比如版权或DateTimeDigitized。
问题是:如何在不加载整个图像内容的情况下编辑这个 exif 标签?
我是否需要重写整个 exif 配置文件()或者有什么方法可以编辑配置文件?image.AddProfile(profile, true)