2016-04-06 23 views
1

Exif değerlerini okumak için Magick.NET kütüphanesini kullanıyorum. En yüksek performans için, bazı görüntü meta verileriyle çalışırken gerçek görüntü içeriğine ihtiyacım olmadığı için Ping yöntemini kullanıyorum (bkz. this).Resimdeki mevcut exif profiline etiket değeri ekleyin

Fakat şimdi bu değer yoksa exif etiket değeri yazmam gerekiyor.

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); 
      } 
     } 
    } 

Ama bu kod değil EXIF ​​yazılı etiket değeri: Ben bunu yapmaya çalışıyorum ne. (Bu answer gibi) dosyayı başka bir yol açarken başarıyla etiket değerini yazabilirsiniz:

 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(); 

      ... 
     } 

Ama bu kod çözme tüm resim içeriği, ben 'içerik bağımsız' etiketleri değerlerini değiştirmek için buna ihtiyacı yoktur Copyright veya DateTimeDigitized.

soru şudur: nasıl düzenlemek bu exif etiketleri için yükleme bütün görüntü içeriksiz?
Tüm exif profilini (image.AddProfile(profile, true)) yeniden yazmam gerekiyor mu, yoksa profili düzenlemenin bir yolu var mı?

cevap

2

Maalesef bunu Magick.NET'te yapmanın bir yolu yoktur. Resmi yazmak istiyorsanız resmin tüm piksellerini .Read ile okumalısınız. .Ping metodu, sadece tüm görüntüyü yüklemeden görüntüden bilgi almak istiyorsanız kullanılmalıdır.

Sadece bir değeri değiştirmenin/düzenlemenin bir yolu yoktur. Profili doğru şekilde değiştiriyorsunuz. Bununla birlikte, true'a ihtiyacınız yoktur, çünkü bu, AddProfile için varsayılan değerdir.

Bu konuda size yardımcı olabilecek başka bir kitaplık da olabilir. Ayrıca JPEG özelliklerini okuyabilir ve dosyada EXIF ​​profilinin konumunu bulabilirsiniz. Sonra değiştirmek ve görüntüye geri yazmak için ExifProfile sınıfını kullanın. O kısmı okuyucunun bir alıştırması olarak bırakacağım.

Ayrıca, bu özelliğin ImageMagick'te sonlanacağı pek olası değildir, çünkü bu, görüntüleri kodlama ve kod çözme biçimimizi yeniden yazmamız gerektiği anlamına gelir. Magick.NET'in bakıcısı olarak bu ekstra özelliği gelecekte ekleyebilirim. ImageMagick'in parçası olmayan bir JPG/PNG görüntüsünün boyutunu azaltmak için kullanılabilecek ImageOptimizers yazdım. Ama müsait olduğunda sana söyleyemem.

+0

Böyle bir durumdan şüpheleniyorum, ancak bilgileri doğruladığınız için teşekkür ederim. Bilgi JPEG özellikleri aldıktan sonra olası beklenmedik sonuçları ile jpeg içine manuel müdahale yerine belirli, iyi desteklenen bir araç kullanmak için kesinlikle daha iyi olduğu sonucuna vardım :) Son soru: eğer teknik olarak mümkün ise - bir gün göreceğiz şansız Magick.NET'te 'içerik yüklemeden exif düzenleme' özelliği var mı? – Sam

+0

Bu soruyu cevaplamak için cevabı güncelledim. – dlemstra

+0

Bu özellik düşündüğüm kadar kolay uygulanmıyor gibi görünüyor, bu yüzden exif düzenlemesini bir süre daha artırmak için başka bir yol bulacağız. Ama gelecekte bu özelliği görmekten mutluluk duyacağız :) Neyse, cevaplarınız için ve Magick.NET için teşekkürler! – Sam