我正在为一个将处理我们图像处理的项目编写服务。一个这样的过程应该从提供的byte[]
中删除所有元数据,并返回与byte[]
相同的图像。
我目前正在处理的方法包括始终将图像转换为Bitmap
,然后将其转换回原始格式并从MemoryStream
返回数据。
我还没能测试它,但有些东西告诉我,我会遇到一些质量损失。
如何使用通用格式从任何图像中删除所有元数据?
(bmp, gif, png, jpg, icon, tiff)
不确定如何进一步缩小范围。如果我得到关于downvotes的一些反馈,那就太好了。
答案 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库是我能想到的最好的。