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

3

我正在为一个项目编写服务,将负责处理图像处理。其中一个处理过程应该是从提供的byte []中剥离所有元数据,并将相同的图像作为byte []返回。

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

我还没有能够测试它,但有些东西告诉我我将会经历一些质量损失。

如何从具有常见格式的任何图像中删除所有元数据?

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

不确定我如何进一步缩小范围,如果我得到有关否定意见的反馈将会很好。

1个回答

2
对于无损格式(除了JPEG),您的想法是将其加载为位图并重新保存,这是可以的。不确定.NET是否本地支持TIFF(我怀疑它不支持)。
对于JPEG,正如您所建议的,如果在解压缩文件后重新压缩文件,则可能会出现质量损失。为此,您可以尝试ExifLibrary,看看它是否有任何东西。如果没有,有一些命令行工具(如ImageMagick)可以剥离元数据。(如果您使用ImageMagick,则已经准备就绪,因为它支持所有所需格式。您需要的命令是convert -strip。)
对于TIFF,.NET具有内置的TiffBitmapDecoder...Encoder类,您可能可以使用;请参见这里
简而言之,使用像ImageMagick这样的外部工具绝对是最简单的解决方案。如果您无法使用外部工具,则几乎肯定需要特殊处理.NET不支持本地的格式(以及有损JPEG)。 编辑:我刚刚读到ImageMagick 不支持JPEG的无损剥离,很抱歉。我想到的最好的方法就是使用我上面链接的库或其他JPEG库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接