我使用Magick.NET庫來讀取exif值。爲了獲得最高性能,我使用Ping
方法(請參閱this),因爲在處理某些圖像元數據時,我不需要實際的圖像內容。將標記值添加到圖像中的現有exif配置文件
但是現在我需要編寫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。 (在此answer等)打開文件時的另一種方式,我可以成功寫入標籤值:
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)
)或有一些方法來編輯配置文件?
我懷疑像這樣,但謝謝你確認信息。在得到info JPEG規範後,我總結說,使用特定的,支持良好的工具而不是手動干預jpeg可能會帶來意想不到的後果:)最後一個問題:如果技術上可行 - 有一天我們會看到的機會是多少在Magick.NET中的'exif edit without content loading'功能? – Sam
我已更新答案來回答此問題。 – dlemstra
嗯,這個功能似乎並不像我想的那麼簡單,所以我們會找到其他一些方法來提高exif編輯一段時間。但我們很高興在將來看到這個功能:)無論如何,謝謝你的答案和Magick.NET! – Sam