从常见图像格式中删除所有元数据?

时间:2014-02-03 21:01:29

标签: c# image image-processing bitmap metadata

我正在为一个将处理我们图像处理的项目编写服务。一个这样的过程应该从提供的byte[]中删除所有元数据,并返回与byte[]相同的图像。

我目前正在处理的方法包括始终将图像转换为Bitmap,然后将其转换回原始格式并从MemoryStream返回数据。

我还没能测试它,但有些东西告诉我,我会遇到一些质量损失。

如何使用通用格式从任何图像中删除所有元数据?

(bmp, gif, png, jpg, icon, tiff)

不确定如何进一步缩小范围。如果我得到关于downvotes的一些反馈,那就太好了。

1 个答案:

答案 0 :(得分:2)

对于无损格式(JPEG除外),您将其加载为位图并重新保存的想法很好。不确定.NET本身是否支持TIFF(我怀疑它确实如此)。

对于JPEG,正如您所建议的那样,如果您在解压缩文件后重新压缩文件,可能会有质量损失。为此,您可以尝试ExifLibrary并查看是否有任何内容。如果没有,可以使用命令行工具(如ImageMagick)来删除元数据。 (如果您使用ImageMagick,那么您已经完成了设置,因为它支持您所需的所有格式。您想要的命令是convert -strip。)

对于TIFF,.NET内置了TiffBitmapDecoder...Encoder类,您可以使用它们; see here

简而言之,使用像ImageMagick这样的外部工具绝对是最简单的解决方案。如果你不能使用外部工具,你几乎肯定需要特殊情况下.NET本身不支持的格式(以及有损JPEG)。

编辑:我刚读过ImageMagick doesn't do lossless stripping with JPEGs,抱歉。我想使用我上面链接的库或其他一些JPEG库是我能想到的最好的。