2009-06-17 11 views
11

JPEGからすべてのEXIFデータを削除するにはどうすればよいですか?EXIFデータをさまざまなライブラリで読み込んで編集する方法はたくさんありますが、それを削除する方法の例。ちょうどテストのためJPEGでEXIFデータを簡単に削除する方法

それはそうでも醜いとhackishedアプローチが参考になる提案:)

私はすでに、最後の1は私の場合には存在しない、EXIF開始/終了マーカー0xFFE1 & 0xFFE2を探してみました0_o

TIA

+0

なぜこれを行う必要がありますか? –

+0

のためこの http://stackoverflow.com/questions/1001537/localreport-render-fails-with-images-from-nikon-coolpix-5600 –

+0

あなたはこれについていくつかの担当者を提供すると考えましたか?それは簡単なgrunt-workのように見えます。 –

答えて

7

私は、ファイルをBitmapオブジェクトに読み込んで、ファイルに書き戻すのはやりやすいはずだと思います。

EXIFデータを削除した「イメージローテーションプログラム」を実行中に、私は不満を感じます。しかし、この場合、それはあなたが欲しいものです!

+1

今のところこのアプローチではなくなりました。 –

0

それはあなたがそのようなPaint.NETとして塗料パッケージに読み取りやPaint Shop Proは、新しいファイルとしてそれを再保存しようとしているファイルは1つだけですか?

まず、画像を新しいファイルにコピーする必要があります。

もちろん、たくさんのファイルがある場合は、これが最善の方法ではないかもしれません。 Paint Shop Proには、調査する価値のあるバッチ変換オプションがありますが、

EDIT:(写真操作パッケージではなくEXIFデータを保存する可能性が高いため)ペイントパッケージのバッチ操作を調査し、自動化できるかどうかを調べる価値があるかもしれません。イメージを処理するスクリプト/バッチファイルを作成できます。

イメージのファイルを読み書きするためのiikのコメントは、この場合に適用されますが、最小限の圧縮で書き込むことで最小化することができます。

+0

残念ながら、そのカメラモデルで撮影されたすべての写真と、おそらく他のモデルでもあります –

+0

カメラメーカーに連絡しましたか?ファームウェアのバグのように聞こえますか? – ChrisF

+0

@ChrisF:それは本当に問題を解決するつもりです。 :P –

1

画像をデコードして再エンコードするのは、画質を落とすためです。代わりに、メタデータのみを変更する方法を見つける必要があります。私はそれを試していないが、私はInPlaceBitmapMetadataWriterがトリックを行うと思います。

+0

デコード/再エンコードが品質をある程度損なうことは間違いありません。彼が必要とするものに基づいて努力する価値があるかどうかを判断するのはポスターまでです。 –

+0

私はそれを見てみましたが、私の使用事例では複雑になります。 –

20

私のブログでWPFライブラリを使用してこれについて書いたことがありますが、Windowsのバックエンドコールがちょっと混乱しているのでこの種のエラーは失敗しました。

私のfinal solutionも、exifを削除するために基本的にバイトのjpegパッチを適用する方がはるかに高速です。高速かつシンプルな:)

[EDIT:ブログポストはより多くの更新されたコードを持っている]

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) 
     { 
     SkipExifSection(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 SkipExifSection(Stream inStream) 
    { 
     byte[] header = new byte[2]; 
     header[0] = (byte) inStream.ReadByte(); 
     header[1] = (byte) inStream.ReadByte(); 
     if (header[0] == 0xff && header[1] == 0xe1) 
     { 
     int exifLength = inStream.ReadByte(); 
     exifLength = exifLength << 8; 
     exifLength |= inStream.ReadByte(); 

     for (int i = 0; i < exifLength - 2; i++) 
     { 
      inStream.ReadByte(); 
     } 
     } 
    } 
    } 
} 
+0

Bitmapを使って保存してもうまくいきませんでした。 – Sung

1

それはここからjhead.exeを使用し、あまりにも簡単です。http://www.sentex.net/~mwandel/jhead/

場合は少しバッチファイルを作成します例えば: jhead.exe -purejpg *.jpg

同じフォルダ内のすべてのjpegからすべてのメタデータを削除します。

関連する問題