我正在为一个项目编写一项服务来处理我们的图像处理。一个这样的过程应该从数据中剥离所有元数据byte[]
提供并返回相同的图像byte[]
.
我目前正在研究的方法涉及始终将图像转换为Bitmap
,然后将其转换回原始格式并从 a 返回数据MemoryStream
.
我还没有能够测试它,但有件事告诉我,我将经历一些质量损失。
如何从具有通用格式的任何图像中删除所有元数据?
(bmp, gif, png, jpg, icon, tiff)
不知道如何进一步缩小范围。如果我能得到一些有关否决票的反馈,那就太好了。
对于无损格式(JPEG 除外),您可以将其作为位图加载并重新保存。不确定 .NET 本身是否支持 TIFF(我怀疑它确实支持)。
对于 JPEG,正如您所建议的,如果您在解压缩后重新压缩文件,可能会出现质量损失。为此,您可以尝试Exif库看看有没有什么。如果没有,可以使用命令行工具(例如 ImageMagick)来删除元数据。 (如果您使用 ImageMagick,那么您就已经准备好了,因为它支持您所需的所有格式。您想要的命令是convert -strip
.)
对于 TIFF,.NET 内置了TiffBitmapDecoder
and ...Encoder
您可能能够使用的课程;see here.
简而言之,使用像 ImageMagick 这样的外部工具绝对是最简单的解决方案。如果您无法使用外部工具,则几乎肯定需要对 .NET 本身不支持的格式(以及有损 JPEG)进行特殊处理。
EDIT:我刚刚读到 ImageMagick不对 JPEG 进行无损剥离, 对不起。我想使用上面链接的库或其他一些 JPEG 库是我能想到的最好的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)