2016-04-06 26 views
1

私はMagick.NETライブラリを使用してexif値を読み取ります。最高のパフォーマンスを得るために、私はメソッド(thisを参照)を使用しています。イメージメタデータで作業する場合、実際のイメージコンテンツは必要ないからです。イメージ内の既存のexifプロファイルにタグ値を追加

しかし、この値が存在しない場合、exifタグの値を書き込む必要があります。

public static void Test() 
    { 
     var path = @"C:\image.jpg"; 

     using (var image = new MagickImage()) 
     { 
      image.Ping(path); 

      var profile = image.GetExifProfile(); 

      var copyright = profile.Values.FirstOrDefault(x => x.Tag == ExifTag.Copyright); 
      if (copyright != null) 
      { 
       Trace.WriteLine("Copyright: " + copyright); 
      } 
      else 
      { 
       Trace.WriteLine("Write Copyright data"); 

       profile.SetValue(ExifTag.Copyright, "Example text"); 
       image.AddProfile(profile, true); 
       image.Write(path); 
      } 
     } 
    } 

しかし、このコードは、 EXIFにタグ値を書いていない:私は何をしようとしています。 (このanswerのように)別の方法ファイルを開くとき、私は成功したタグ値を書き込むことができます。

 var path = @"C:\image.jpg"; 

     // Read image with content 
     using (var image = new MagickImage(path)) 
     { 
      // image.Ping(path) - no more need 
      var profile = image.GetExifProfile(); 

      ... 
     } 

しかし、このデコード全体画像コンテンツを、私は「コンテンツに依存しない」タグの値を変更するためにそれを必要としませんCopyrightまたはDateTimeDigitizedのようになります。

質問です:どのように編集このEXIFタグ画像全体のコンテンツをロードしませんか?
exif全体のプロファイル(image.AddProfile(profile, true))を書き直す必要がありますか、プロファイルを編集するだけの方法がありますか?

答えて

2

残念ながら、Magick.NETでこれを行う方法はありません。画像を書きたい場合は、画像のすべてのピクセルを.Readで読み取る必要があります。 .Pingメソッドは、画像全体をロードせずに画像から情報を取得する場合にのみ使用してください。

1つの値を置き換える/編集する方法はありません。プロファイルを正しく置き換えています。ただし、これはAddProfileのデフォルト値であるため、trueは必要ありません。

これに役立つライブラリが他にもあるかもしれません。また、JPEG仕様を読み、ファイル内のEXIFプロファイルの位置を見つけることもできます。その後、ExifProfileクラスを使用して変更し、イメージに書き戻します。私はその部分を読者のための練習として残します。

ImageMagickでこの機能が終了する可能性はあまりありません。画像をエンコードしてデコードする方法を書き直す必要があるからです。 Magick.NETのメンテナーとして、私はこの特別な機能を将来追加することができました。 ImageMagickの一部ではないJPG/PNGイメージのサイズを縮小するために使用できるImageOptimizersをすでに書いています。しかし、それがいつ利用可能になるか私はあなたに言うことができません。

+0

このような疑いがありますが、情報を確認していただきありがとうございます。情報のJPEG仕様を取得した後は、予期せぬ結果を伴うJPEGへの手動介入ではなく、特定のサポートツールを使用することが確実であると結論づけました:)最後の質問:技術的に可能な場合 - あるチャンスは Magick.NETの 'exif edit with content loading'のような機能ですか? – Sam

+0

私はこの質問に答える答えを更新しました。 – dlemstra

+0

さて、この機能は思ったほど実装が簡単ではないようですので、しばらくの間、exifを増やすための他の方法があります。しかし、私たちは将来この機能を見ることができてうれしいです:)とにかく、あなたのおかげで答え、Magick.NETのすべて! – Sam