设置JPEG元数据 - 实现问题

时间:2011-02-14 17:29:41

标签: c# image encoding metadata

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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