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

标签 c# image image-processing bitmap metadata

我正在为一个将处理我们的图像处理的项目编写服务。一个这样的过程应该从提供的 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/

相关文章:

c# - ASP.NET MVC5 未为请求的 URL 配置网络服务器,且服务器上未启用目录浏览

c# - SQL CE 4 和 EF 6 代码优先不支持默认值

ios - 如何在 iOS 中缩放裁剪叠加图像

python - 如何使用 numpy 将 RGB 图像转换为基于颜色的单热编码 3d 数组?

ruby-on-rails - Rails 的最佳图像优化技术

c++ - 从 RGB 值构建像素

c# - 在 C# 中使用 Regex 检查可选的逗号分隔的重复序列

c++ - OpenCV/C++ - 编辑所有孤立的像素

java - 如何通过 BufferedImage 将巨大的图像加载到 Java?

c# - HasOptional 对应的 DataAnnotation 属性