我正在为一个将处理我们的图像处理的项目编写服务。一个这样的过程应该从提供的 byte[]
中剥离所有元数据,并返回与 byte[]
相同的图像。
我目前正在研究的方法涉及始终将图像转换为 Bitmap
,然后将其转换回原始格式并从 MemoryStream
返回数据。
我还没有能够测试它,但有一些东西告诉我我会遇到一些质量损失。
如何从具有通用格式的任何图像中删除所有元数据?
(bmp、gif、png、jpg、图标、tiff)
不确定如何进一步缩小范围。如果我能得到一些关于否决票的反馈,那就太好了。
最佳答案
对于无损格式(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 库是我能想到的最好的方法。
关于c# - 从常见图像格式中删除所有元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21537663/