你可以參考這個link。
(感謝那些誰已經回答了同樣的問題,雖然答案是完全正確的,但不能100%解決這個問題。)
這裏有三個步驟,你需要做的:
- 請注意,您應該擁有克隆的Jpeg文件。
- 設置克隆文件的註釋。
- 通過刪除原始jpeg文件來替換文件。
下面是示例代碼:
public void addImageComment(string imageFlePath, string comments)
{
BitmapDecoder decoder = null;
BitmapFrame bitmapFrame = null;
BitmapMetadata metadata = null;
FileInfo originalImage = new FileInfo(imageFlePath);
if (File.Exists(imageFlePath))
{
// load the jpg file with a JpegBitmapDecoder
using (Stream jpegStreamIn = File.Open(imageFlePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
decoder = new JpegBitmapDecoder(jpegStreamIn, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
}
bitmapFrame = decoder.Frames[0];
metadata = (BitmapMetadata)bitmapFrame.Metadata;
if (bitmapFrame != null)
{
BitmapMetadata metaData = (BitmapMetadata)bitmapFrame.Metadata.Clone();
if (metaData != null)
{
// modify the metadata
metaData.Comment = comments;
// get an encoder to create a new jpg file with the new metadata.
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmapFrame, bitmapFrame.Thumbnail, metaData, bitmapFrame.ColorContexts));
//string jpegNewFileName = Path.Combine(jpegDirectory, "JpegTemp.jpg");
// Delete the original
originalImage.Delete();
// Save the new image
using (Stream jpegStreamOut = File.Open(imageFlePath, FileMode.CreateNew, FileAccess.ReadWrite))
{
encoder.Save(jpegStreamOut);
}
}
}
}
}
我不知道這是否會工作或沒有,但我注意到,jpegbitmapdecoder(http://msdn.microsoft.com/en-us/library /system.windows.media.imaging.jpegbitmapdecoder.aspx)具有包含註釋屬性的MetaData屬性。這可能是實際的jpeg評論,而不是exif評論,但我沒有檢查。我猜你的問題來自於這樣一個事實,即圖像有點太泛化,並且似乎沒有任何其他註釋屬性,那麼根據http://msdn.microsoft.com/en-us/exif,我們/庫/ system.drawing.imaging.propertyitem.id.aspx。 :( – Chris
感謝您的反饋,但事實並非如此,我在頁面上運行了代碼,並且所有的值都爲空 – user937036
對不起,我沒有太多的經驗和文檔似乎沒有幫助。我的建議是準備二進制數據從文件,並找到文本註釋手動。不適用於微弱的心,或者如果它的一個選項設置exif註釋,而不是一個標準的... – Chris