设置JPEG元数据 - 实现问题

Bra*_*oso 6 c# encoding metadata image

通过之前的研究,我发现在图像上设置MetaData属性并不太难.例如,我可以将JPEG图像读入Bitmap对象,并通过图像的SetPropertyItem方法更改其"Original Taken"日期(我已经研究过这样做的格式和枚举).

然而,尽管实际的MetaData部分看起来很简单,但我面临着一些令人恼火的实现问题:

1)当我在位图上调用Save()时,似乎没有使用图像的原始编码设置.结果,压缩级别改变(可能是某个默认值); 我的Save()调用后,我可以看到文件大小显着缩小.我知道您可以在Save()调用中自定义图像的编码设置,但老实说,我只想更改图片的元数据; 是不是有任何简单的方法来使用其原始编码设置保存图像?即使我可以在Save()调用中直接引用图像的现有编码设置,这也会有所帮助.

2)显然,当您将原始文件读入Bitmap对象时,它将被锁定.因此,我无法将图像保存在其原始文件名下而不会产生太多麻烦:目前,我正在将从文件中读取的图像绘制到屏幕外位图,处理原始图像,然后保存屏幕外的位图.同样,当我想要做的就是更新图像文件中的元数据时,这似乎是一项非常多的额外工作.

您可以提供的任何建议都将非常受欢迎...我只需更新JPEG文件的元数据(其中大部分与实际的元数据更改无关)所做的工作量让我想知道我是否我错过了一些更简单或更好的方法.

Bra*_*rad 1

您要做的是编辑 EXIF 数据。您现在正在做的是重新压缩图像,这将导致质量损失,正如您所注意到的。

请参阅此代码示例以编辑 EXIF: http://www.dreamincode.net/code/snippet3144.htm