Python için exif işleme kitaplığı [kapalı]


108

Python için iyi bir exif (Takas edilebilir görüntü dosyası formatı) düzenleme kitaplığı arıyorum. İşlem hızından çok esnekliği (örneğin, sağlayıcıların özel etiketlerini alma yeteneğini) tercih ederim. Ne öneriyorsun?


Belki de soru şu şekilde olmalıdır: "Python kullanarak Exif'i (Takas edilebilir görüntü dosyası formatı) düzenlemek için hangi seçenekler mevcut?
dlm

1
@Wooble ve diğerleri: "Bu soru yardım merkezindeki kurallara uyacak şekilde yeniden ifade edilebiliyorsa, lütfen soruyu düzenleyin veya bir yorum bırakın." İkincisini yaptım ama Q daha fazla yorum yapmadan kapandı. Ne oluyor? (Sadece anlamaya çalışıyorum ve eğer bu kaçınılmaz bir
sonuçsa

Bu soruyu sorarken diğer geliştiricilerin fikirlerini almak istedim! PackageOpinionOverflow?
Derek Litz

1
Buradaki hemen hemen tüm exiv2 olmayan çözümlerin erişemeyeceğini unutmayın MakerNote. Bu EXIF ​​etiketinde, kamera üreticileri değerli bilgiler içeren kendi etiketlerini ekler. Dolayısıyla, aşağıdaki cevaplardan çoğu kitaplığa sahip temel etiketleri alırsınız.
user136036

Yanıtlar:


65

Exif-py'ye bir göz atmak isteyebilirsiniz :

Tiff ve jpeg dosyalarından EXIF ​​verilerini çıkarmak için Python kitaplığı. Kullanımı çok kolay - $ ./EXIF.py image.jpg

veya Python Görüntüleme Kitaplığı (PIL) :

Python Görüntüleme Kitaplığı (PIL), Python yorumlayıcınıza görüntü işleme yetenekleri ekler. Bu kitaplık birçok dosya formatını destekler ve güçlü görüntü işleme ve grafik yetenekleri sağlar.

Uygun bir şekilde adlandırılmış pyexif de var: http://pyexif.sourceforge.net/

Pyexif python kitaplığı ve araçları, EXIF ​​bilgilerini, onu içeren Jpeg ve Tiff dosyalarından çıkarmayı amaçlamaktadır. Bu bilgiler tipik olarak dijital kameralar, dijital film tarayıcıları vb. Gibi dijital görüntüleme aygıtları kullanılarak oluşturulan görüntülere dahil edilir.

Ancak, pyexif epey bir süredir güncellenmemiş gibi görünüyor. Onlarınki EXIF-py'yi kontrol etmek için hile yapmıyorsa tavsiye ediyorlar, bu yüzden muhtemelen ilk önce onu denemelisiniz, çünkü son zamanlarda kaynakforge sayfalarında çok fazla olmasa da bir miktar aktivite var gibi görünüyor . Son olarak, PIL kullanarak şunu yapabilirsiniz:

from PIL import Image
from PIL.ExifTags import TAGS

def get_exif(fn):
    ret = {}
    i = Image.open(fn)
    info = i._getexif()
    for tag, value in info.items():
        decoded = TAGS.get(tag, tag)
        ret[decoded] = value
    return ret

Sorumluluk reddi beyanı :
Hangisinin en iyisi olduğuna dair hiçbir fikrim yok, bu sadece Google ile bir araya getirebildiğim şeydi. :)


20
Bu "çözümlerin" hiçbiri EXIF ​​etiketlerini geri yazamaz, bu nedenle sorunun çözümü değildir.
odinho - Velmont

23
Teknik olarak EXIF ​​etiketlerinin yazılmasına izin vermese de, bunu çok yararlı buldum. Kod yazmak için +1.
Cerin

3
Python 3.x için PIL
Fazla Beş

Güzel bakış. Sadece bir not: exif-py şu anda Python 3.x ile uyumlu değil gibi görünüyor (Python 3.3.3 ile test edildi, ayrıca bkz . Github.com/ianare/exif-py/issues/12 ).
cel

3
@MoreThanFive Yoğun bir şekilde bakımı yapılan ve entegre olan bir PIL çatalı var pip! github.com/python-pillow/Pillow
ibizaman

59

Son zamanlarda kendim de pyexiv2 kullanıyorum ve ihtiyaçlarımı oldukça iyi karşıladı . Belki sizinkine de uyabilir.


9
Kayıt için: pyexiv2, hepsinin içinde en iyi korunan ve en eksiksiz (EXIF etiketlerini dosyaya geri yazmak dahil) gibi görünüyor.
rbp

1
Pyexiv2 bir sanal ortama kolayca kurulabilir mi?
Matt Austin

2
Bakım yavaşlamış gibi görünüyor ve Mac'te kurulum cehennem gibi. : /
Vortexfive

6
Önem verenler için: Ne yazık ki, pyexiv2 yalnızca Python 2 için mevcuttur.
texnic

1
<QUOTE src = " redmine.yorba.org/projects/gexiv2/wiki "> Bu, Python 2 veya 3 ile eşit derecede iyi çalışacaktır, bu da GExiv2'yi pyexiv2'nin sadece Python 2'yi destekleyen mükemmel bir alternatif haline getirir. </QUOTE>
jno

31

Exiv2 Tabanlı çözümler

Exiv2 (exiv2: http://exiv2.org/ ), birçok görüntü türüne (JPEG, PNG, TIFF ve birçok ham format) meta verilerin okunmasını ve yazılmasını destekleyen, standardı anlayan (Xmp, IPTC) olgun, açık kaynaklı bir C ++ kitaplığıdır ve Exif) ve standart olmayan meta veriler ("Makernotes") ve birden çok platformda (Windows, Linux ve bazı işlerde Mac) çalışır.

Exiv2'ye Python bağlamaları şunlardır:

Pyexiv2'nin bir avantajı, python 2.7 için kullanılabilen bir pencere yapısı olmasıdır. Gexiv2 için bir Windows oluşturma isteği burada: https://bugzilla.gnome.org/show_bug.cgi?id=712441

exiv2 ve bağlamaların tümü açık kaynaklıdır (GPL).


bunu exiv2'ye bağlamalar hakkındaki en son bilgilere göre güncelledi
dlm

pyexiv2çatallandı: py3exiv2.tuxfamily.org .
Artem Klevtsov

tilloy.net bağlantısı öldü
jtlz2

5

Bu makale , saf Python kullanarak EXIF ​​meta verilerini yazmak (ve sadece okumak değil) için bir Python modülünü açıklar. Görünüşe göre, PIL, pyexif veya EXIF-py hiçbiri EXIF ​​yazmayı desteklemiyor. pyexiv2, yeni ve platforma özgü görünüyor.


Bunun daha az kanayan kenar olarak kabul edilip edilemeyeceğinden emin değilim.
Mad Fizikçi

5

PIL kullanın :)

import os,sys
from PIL import Image
from PIL.ExifTags import TAGS

if __name__ == '__main__':
    for (k,v) in Image.open(sys.argv[1])._getexif().iteritems():
        print '%s = %s' % (TAGS.get(k), v)
    os.system('pause')

1
Saf PIL / Yastık, EXIF ​​etiketlerinin değiştirilmesine izin vermez. Ancak buna yardımcı olan küçük bir kütüphane var: github.com/hMatoba/Pyxif
Simon Steinberger

4

En sayfa http://redmine.yorba.org/projects/gexiv2/wiki (oldu https://wiki.gnome.org/Projects/gexiv2 okur) şimdi :

Bu, Python 2 veya 3 ile eşit derecede iyi çalışacaktır, bu da GExiv2'yi, yalnızca Python 2'yi destekleyen pyexiv2 için mükemmel bir alternatif haline getirir.

Dolayısıyla, hem Python2 hem de Python3 artık GExiv2 tarafından desteklenmektedir.

İyi haberler.


2
bağlantı çalışmıyor. bu çalışır wiki.gnome.org/Projects/gexiv2
user881300

iyi güncelleme! 2013'ten bu yana 3 yıl geçti ...
jno

3

Gheorghe Milas'ın http://www.emilas.com/jpeg/ adresindeki "JPEG EXIF, IPTC ve COM meta verilerini ayrıştırmak, okumak ve yazmak için bir python kitaplığı" olan jpeg.py kitaplığına da bakabilirsiniz .

Bir dezavantajı, etki alanını DynDNS aracılığıyla dinamik bir IP'de barındırıyor görünmesidir, bu nedenle her zaman mevcut değildir.


Artık yok.
Simon Steinberger

3

her nasılsa _getexif için yukarıdaki Paolo'nun koduyla bir attributeError alıyorum .. Python 2.6.6 ve PIL 1.1.7 kullanıyorum. _Getexif artık kullanılmıyor mu?

İşte benim için işe yarayan küçük bir değişiklik.

from PIL import Image
from PIL.ExifTags import TAGS

def get_exif(fn):
    ret = {}
    i = Image.open(fn)
#    info = i._getexif()
    info = i.tag.tags
    for tag, value in info.items():
        decoded = TAGS.get(tag, tag)
        ret[decoded] = value
    return ret

3

PIL'deki koda dayalı kendi küçük kütüphanemi yazmaya başladım. buradan kontrol edin .


1
Hey bu iyi görünüyor. Onunla keskin kenarlar var mı?
Zengin

@Rich: Artık hatırlamıyorum. Bu benim için çalıştı.
Albert

3

Http://www.sno.phy.queensu.ca/~phil/exiftool/ çevresinde kendi sarmalayıcılarımı kullanıyorum - bunun nedeni çok eksiksiz olması, geliştiricinin çok aktif olması. Ve neredeyse tüm görüntü formatlarını destekleyememek, ihtiyaç duyulan proje için mutlak bir göstericidir.

Elbette dezavantajı python olmamasıdır, bu yüzden benim yaptığım gibi alt işlem çağrılarını kullanmanız gerekir.


Exiftool github.com/smarnach/pyexiftool için bir python sarmalayıcı var . Çok eksiksiz olduğu için exiftool'a bir oy.
Long Vu

Bir Python kütüphanesi istiyor.
Diego Woitasen


0

Python 2.6'da modülün yeri farklıdır. Bunu kullan:

import Image    
from ExifTags import TAGS
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.