2013-06-05 9 views
5

優れたExifLibを使用して、Windows Phone 8(http://www.codeproject.com/Articles/36342/ExifLib-A-Fast-Exif-Data-Extractor-for-NET-2-0)の画像からExifデータを抽出しています。しかしプライバシーの制約のため、ユーザーの写真ライブラリからインポートした画像からGPS exifデータを削除する必要があります。Windows PhoneでExif Imageデータを編集/削除する

残念ながら、私はこのデータやポインタやライブラリが簡単に編集または削除できないことがあります。

ご協力いただければ幸いです。

答えて

4

イメージを再エンコードすることなくEXIFデータを削除する方法を示すblog post hereがあります。投稿のコード

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 
     } 
    } 
} 
関連する問題