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

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

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

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

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

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

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

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

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

对于TIFF,.NET内置了TiffBitmapDecoder...Encoder你可能能够使用的...Encoder类; 看到这里 。

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

编辑 :我刚刚读到ImageMagick 没有使用JPEG进行无损剥离 ,抱歉。 我想使用上面链接的库或其他一些JPEG库是我能想到的最好的。