在JPEG图像的属性窗口中,有一个名为“摘要”的选项卡。在此选项卡中,有一个名为“ Comments”的字段,我想编写一些c#代码,该代码会将给定的字符串添加到该字段,例如“ This is a photo”。
那里有些善良的灵魂知道该怎么做吗?
非常感谢。
以下代码解决了我的问题,并在给定的JPEG图像中添加了注释:
public void addImageComment(string imageFlePath, string comments) { string jpegDirectory = Path.GetDirectoryName(imageFlePath); string jpegFileName = Path.GetFileNameWithoutExtension(imageFlePath); 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.SetQuery("/app1/ifd/exif:{uint=40092}", 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); } } } } }
这实际上是Konamiman友善提供的链接下找到的代码的轻度修改版本。
请注意,要进行此工作,您需要向 PresentationCore 和 WindowsBase 添加.NET引用。如果使用Visual Studio 2008,则可以通过以下方式实现:
在解决方案资源管理器中右键单击您的项目
从下拉列表中,选择添加“参考…”。
在打开的新框中,选择“ .NET”选项卡
滚动到上面提到的两个参考,然后在每个参考上单击“确定”。
非常感谢danbystrom和Konamiman在这件事上的帮助。我非常感谢您的快速回应。