Easy way to clean metadata from an image?

前端 未结 2 1622
轮回少年
轮回少年 2021-01-07 10:38

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

2条回答
  •  醉梦人生
    2021-01-07 11:34

    I would suggest this, the source is here: Removing Exif-Data for jpg file

    Changing a bit the 1st function

    public Stream PatchAwayExif(Stream inStream)
    {
      Stream outStream = new MemoryStream();
      byte[] jpegHeader = new byte[2];
      jpegHeader[0] = (byte)inStream.ReadByte();
      jpegHeader[1] = (byte)inStream.ReadByte();
      if (jpegHeader[0] == 0xff && jpegHeader[1] == 0xd8) //check if it's a jpeg          file
      {
         SkipAppHeaderSection(inStream);
      }
      outStream.WriteByte(0xff);
      outStream.WriteByte(0xd8);
    
      int readCount;
      byte[] readBuffer = new byte[4096];
      while ((readCount = inStream.Read(readBuffer, 0, readBuffer.Length)) > 0)
      outStream.Write(readBuffer, 0, readCount);
    
      return outStream;
    }
    

    And the second function with no changes, as post

        private void SkipAppHeaderSection(Stream inStream)
        {
            byte[] header = new byte[2];
            header[0] = (byte)inStream.ReadByte();
            header[1] = (byte)inStream.ReadByte();
    
            while (header[0] == 0xff && (header[1] >= 0xe0 && header[1] <= 0xef))
            {
                int exifLength = inStream.ReadByte();
                exifLength = exifLength << 8;
                exifLength |= inStream.ReadByte();
    
                for (int i = 0; i < exifLength - 2; i++)
                {
                    inStream.ReadByte();
                }
                header[0] = (byte)inStream.ReadByte();
                header[1] = (byte)inStream.ReadByte();
            }
            inStream.Position -= 2; //skip back two bytes
        }
    

提交回复
热议问题