经过之前的研究,我发现设置图像的元数据属性并不太难。例如,我可以将JPEG图像读入一个Bitmap对象,并通过该图像的SetPropertyItem方法更改其“拍摄日期”(我已经研究了这个操作的格式和枚举)。
然而,虽然实际的元数据部分似乎很容易,但我面临着一些令人烦恼的实现问题:
1)当我在位图上调用Save()时,似乎没有使用图像的原始编码设置。因此,压缩级别会发生变化(可能是某个默认值);我可以看到保存后的文件大小显著缩小。我知道您可以在Save()调用中自定义图像的编码设置,但老实说,我只想更改图片的元数据;难道没有任何简单的方法可以只使用原始编码设置保存图像吗?即使我能够直接引用Save()调用中图像的现有编码设置,那也会有帮助。
2)显然,在将图像读入Bitmap对象时,原始文件被锁定。因此,我不能在原始文件名下保存图像,除非进行大量的操作:目前,我正在将从文件中读取的图像绘制到离屏位图上,处理完原始图像,然后保存离屏位图。同样,这似乎是一项非常繁琐的额外工作,当我只想更新图像文件中的元数据时。
如果您能提供任何建议,将不胜感激...为了更新JPEG文件的元数据(其中大部分与实际元数据更改无关),我所做的工作量使我怀疑自己是否错过了一些更简单或更好的方法。