c# – 修改元数据后保存图像

在修改元数据后保存图像时出现问题.

基本上,我想打开我的图像,显​​示它,修改它的EXIF元数据,然后保存它.

首先,我在尝试保存图像时遇到问题,因为原始文件被锁定(我有一个通用的GTI错误).在阅读了一些帖子并找到问题后,我用using关键字解决了锁定问题.

但问题是如果我使用“使用”,我的Image的propertyItems列表是空的,我无法修改我的元数据.

这是我加载图像的方式(使用不同的测试)

this.image = new Bitmap(this.path);         // this cause lock on file

/* the following doesn't lock the file, but image.propertyItems is empty */

//using (var bmpTemp = new Bitmap(this.path))
//{
//    this.image = new Bitmap(bmpTemp);
//}

使用streamReader或MemoryStream无济于事……

以下是我修改和保存图像的方法:

 PropertyItem p = this.photo.Image.GetPropertyItem(0x5090);

 p.Id = 0x320;
 p.Type = 2; // Type ASCII
 p.Len = boxTitle.Text.Length;
 p.Value = Encoding.ASCII.GetBytes(boxTitle.Text);

 this.photo.Image.SetPropertyItem(p);
 this.photo.Image.Save(this.photo.Path);

你能解释一下为什么当我使用“使用”时没有propertyItems,我该如何修改图像元数据而不是保存它?

最佳答案 您必须在阅读后单独保留原始图像,修改属性值,然后将其另存为新图像.显然,Microsoft没有在内存中复制元数据 – 只有更改.因此原始图像保持锁定以保留原始元数据.要修改图像的元数据,请保存新图像,然后用它替换旧图像(或删除并重命名).

点赞