2013-06-05 11 views
5

Używam doskonałego ExifLib do wyodrębniania danych Exif z moich obrazów w systemie Windows Phone 8 (http://www.codeproject.com/Articles/36342/ExifLib-A-Fast-Exif-Data-Extractor-for-NET-2-0). Jednak ze względu na ograniczenia prywatności muszę mieć możliwość usunięcia danych GPS exif z obrazów zaimportowanych z biblioteki zdjęć użytkownika.Edytowanie/usuwanie danych Exif Image w systemie Windows Phone

Niestety nie mogę znaleźć sposobu na łatwe edytowanie lub usuwanie tych danych, jakichkolwiek wskaźników lub bibliotek, których mi brakuje?

Każda pomoc będzie mile widziana.

Odpowiedz

4

Istnieje blog post here pokazujący, jak usunąć dane EXIF ​​bez ponownego kodowania obrazu. Kod ze stanowiska:

using System.IO; 

namespace ExifRemover 
{ 
    public class JpegPatcher 
    { 
     public Stream PatchAwayExif(Stream inStream, Stream outStream) 
     { 
      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; 
     } 

     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 
     } 
    } 
} 
Powiązane problemy