Easy way to clean metadata from an image?

asp.net, c#, image-processing, metadata, system.drawing

Solution

- The .NET way: You may want to try your hand at the System.Windows.Media.Imaging.BitmapEncoder class - more precisely, its `Metadata` collection. Quoting MSDN:

Metadata - Gets or sets the metadata that will be associated with this bitmap during encoding.

The 'Oops, I (not so accidentally) forgot something way: Open the original bitmap file into a `System.drawing.Bitmap` object. Clone it to a new `Bitmap` object. Write the clone's contents to a new file. Like this one-liner:

((System.Drawing.Bitmap)System.Drawing.Image.FromFile(@"C:\file.png").Clone()).Save(@"C:\file-nometa.png");

The direct file manipulation way (only for JPEG): Blog post about removing the EXIF area.

Problem

I'm working on a service for a company project that handles image processing, and one of the methods is supposed to clean the metadata from an image passed to it. I think implementation I currently have works, but I'm not sure if it's affecting the quality of images or if there's a better way to handle this task. Could you let me know if you know of a better way to do this? Here's the method in question: ``` public byte[] CleanMetadata(byte[] data) { Image image; if (tryGetImageFromBytes(data, out image)) { Bitmap bitmap = new Bitmap(image); using (var graphics = Graphics.FromImage(bitmap)) { graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.CompositingMode = CompositingMode.SourceCopy; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; graphics.DrawImage(image, new Point(0, 0)); } ImageConverter converter = new ImageConverter(); return (byte[])converter.ConvertTo(image, typeof(byte[])); } return null; } ``` And, for reference, the `tryGetImageFromBytes` method: ``` private bool tryGetImageFromBytes(byte[] data, out Image image) { try { using (var ms = new MemoryStream(data)) { image = Image.FromStream(ms); } } catch (ArgumentException) { image = null; return false; } return true; } ``` To reiterate: is there a better way to remove metadata from an image that doesn't involve redrawing it? Thanks in advance.

Original source

Related problems