这应该是C#中一个非常简单的编程任务,但是在我搜索了一段时间后,我根本找不到任何与删除元数据有关的内容。 我想删除jpg和png图像元数据,例如:文件夹路径,共享,所有者和计算机。 我的应用程序是MVC 4应用程序。在我的网站中,用户可以通过此ActionResult方法上传我获得此图像的图像
if (image != null)
{
photo.ImageFileName = image.FileName;
photo.ImageMimeType = image.ContentType;
photo.PhotoFile = new byte[image.ContentLength];
image.InputStream.Read(photo.PhotoFile, 0, image.ContentLength);
}
照片是模特中的一个属性,就像这样。
public byte[] PhotoFile { get; set; }
我想要删除上述元数据或仅删除所有元数据的方法是使用像这样的编码
if (image != null)
{
image = image.RemoveAllMetaData; !!!
我不介意使用某些第三方dll,只要它与NET 4兼容。
感谢。
答案 0 :(得分:1)
'元数据'在这里有点含糊不清 - 你是说所需的数据让观众正确地确定图像格式以便显示它,只保存原始图像数据?或者,更有可能的是,您是指通常通过EXIF标签添加的额外信息,例如作者,相机类型,GPS位置等?
如果你的意思是类似于EXIF数据,那么网上已经有很多关于如何添加/修改/删除EXIF标签的编程材料,甚至一些已经删除这些标签的应用程序:http://www.steelbytes.com/?mid=30例如
如果您只是想要原始图像数据,则可能必须先读取并处理图像,因为JPEG和PNG都不包含原始图像数据;它使用各种方法进行编码 - 这就是为什么它们包含元数据以告诉您如何首先解码它。您必须学习/探索JPEG和PNG数据格式以提取原始原始图像数据(或者在“有损”编码的情况下合理传真)。
以上所有内容都在Google上可以找到的各种网站上有详细记录,其中很多都包含可以为您处理这些杂务的图像处理库。我怀疑你只是不知道要搜索“JPEG PNG EXIF METADATA”这样的东西。
BTW,EXIF适用于JPEG,其中EXIF是松散地(并且在技术上不完全正确)在JPEG文件末尾添加数据(扩展名),通常可以简单地将其截断以删除。谷歌的快速搜索结果显示了像libexif.sourceforge.net和其他类似结果。我不完全确定PNG格式,但我认为PNG格式(也称为“元数据”)也是为了将这些数据作为文件格式的一部分而不是“扩展”包含在内像EXIF这样的事实后标记。但是,PNG是开源的,您可以从PNG网站(www.libpng.org)获取用于操作它们的库和代码。
答案 1 :(得分:0)
做所有社交媒体网站的工作。创建一个新的图像文件,在图像字节数据中流,并使用您创建的文件而不是上载的原始文件。当然,现在您需要找出原始图像的颜色深度等,以便您创建的图像质量不高 - 除非您需要进行磁盘或图像调整大小。
答案 2 :(得分:0)
有一个应用程序,但它是用Perl编写的。它不会重新压缩图像,而是http://www.sno.phy.queensu.ca/~phil/exiftool
在这个帖子中找到它 How to remove EXIF data without recompressing the JPEG?