Pustaka manipulasi exif untuk python [tertutup]

108

Saya mencari pustaka manipulasi exif (Exchangeable image file format) yang bagus untuk python. Saya lebih suka fleksibilitas (misalnya, kemampuan untuk mengambil tag milik penyedia) daripada kecepatan pemrosesan. Apa yang kamu sarankan?

oo_olo_oo
sumber
Mungkin pertanyaannya harus terbaca: "Opsi apa yang tersedia untuk mengedit Exif (format file gambar yang dapat ditukar) menggunakan python yang menekankan set fitur (misalnya kemampuan untuk mengambil tag milik penyedia dan kompatibilitas dengan berbagai macam format gambar) dengan kecepatan lebih?"
dlm
1
@Wooble dkk: "Jika pertanyaan ini dapat disusun ulang agar sesuai dengan aturan di pusat bantuan, harap edit pertanyaannya atau tinggalkan komentar." Saya melakukan yang terakhir, tetapi Q ditutup tanpa komentar lebih lanjut. Apa yang memberi? (Hanya mencoba untuk memahami, dan tidak ingin membuang waktu untuk berkomentar / mengedit pertanyaan jika kesimpulannya sudah berlalu)
dlm
Saya ingin pendapat pengembang lain saat menanyakan pertanyaan ini! PackageOpinionOverflow?
Derek Litz
1
Perlu diingat bahwa hampir semua solusi non-exiv2 di sini tidak akan dapat diakses MakerNote. Dalam tag EXIF ​​ini, produsen kamera menambahkan tag mereka sendiri yang menyimpan informasi berharga. Jadi Anda hanya akan mendapatkan tag dasar dengan sebagian besar perpustakaan dari jawaban di bawah ini.
pengguna136036

Jawaban:

65

Anda mungkin ingin memeriksa exif-py :

Perpustakaan Python untuk mengekstrak data EXIF ​​dari file tiff dan jpeg. Sangat mudah digunakan - $ ./EXIF.py image.jpg

atau Python Imaging Library (PIL) :

Python Imaging Library (PIL) menambahkan kemampuan pemrosesan gambar ke interpreter Python Anda. Pustaka ini mendukung banyak format file, dan memberikan kemampuan pemrosesan gambar dan grafik yang andal.

Ada juga pyexif yang diberi nama tepat: http://pyexif.sourceforge.net/

Pustaka dan alat pyexif python bertujuan untuk mengekstrak informasi EXIF ​​dari file Jpeg dan Tiff yang menyertakannya. Informasi ini biasanya disertakan dalam gambar yang dibuat menggunakan perangkat pencitraan digital seperti kamera digital, pemindai film digital, dll.

Namun, sepertinya pyexif belum diperbarui cukup lama. Mereka merekomendasikan jika mereka tidak melakukan trik untuk memeriksa EXIF-py, jadi Anda mungkin harus mencoba yang pertama, karena halaman sourceforge mereka tampaknya memiliki beberapa aktivitas di sana akhir-akhir ini, meskipun tidak banyak. Terakhir, dengan menggunakan PIL Anda dapat melakukan ini:

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

Penafian :
Saya sebenarnya tidak tahu mana yang terbaik, inilah yang bisa saya kumpulkan dengan Google. :)

Paolo Bergantino
sumber
20
Tak satu pun dari "solusi" ini dapat menulis kembali tag EXIF, jadi itu bukan solusi untuk pertanyaan tersebut.
odinho
23
Meskipun secara teknis tidak mengizinkan penulisan tag EXIF, saya menemukan ini sangat berguna. 1 untuk menulis kode.
Cerin
3
Tidak ada PIL untuk Python 3.x
Lebih dari Lima
Gambaran yang bagus. Sekadar catatan: exif-py saat ini tidak kompatibel dengan Python 3.x tampaknya (diuji dengan Python 3.3.3, lihat juga github.com/ianare/exif-py/issues/12 ).
cel
3
@MoreThanFive Ada garpu PIL yang dijaga ketat dan terintegrasi dengan pip! github.com/python-pillow/Pillow
ibizaman
59

Saya sendiri baru-baru ini menggunakan pyexiv2 , dan sepertinya sangat sesuai dengan kebutuhan saya. Mungkin itu cocok untuk Anda juga.


sumber
9
Sebagai catatan: pyexiv2 tampaknya yang paling terpelihara dari semuanya, dan terlengkap (termasuk menulis tag EXIF ​​kembali ke file).
rbp
1
Dapatkah pyexiv2 dengan mudah diinstal di dalam virtualenv?
Matt Austin
2
Pemeliharaan tampaknya melambat, dan penginstalan di Mac sangat sulit. : /
Vortexfive
6
Untuk mereka yang peduli: Sayangnya, pyexiv2 hanya tersedia untuk Python 2.
texnic
1
<QUOTE src = " redmine.yorba.org/projects/gexiv2/wiki "> Ini akan bekerja sama baiknya dengan Python 2 atau 3, yang menjadikan GExiv2 pengganti yang sangat baik untuk pyexiv2, yang hanya mendukung Python 2. </QUOTE>
jno
31

Solusi Berbasis Exiv2

Exiv2 (exiv2: http://exiv2.org/ ) adalah pustaka C ++ sumber terbuka dan matang yang mendukung pembacaan dan penulisan metadata ke banyak jenis gambar (JPEG, PNG, TIFF dan banyak format mentah), memahami standar (Xmp, IPTC dan Exif) dan metadata non-standar ("Makernotes"), dan berjalan pada banyak platform (Windows, Linux, dan, dengan beberapa pekerjaan, Mac).

Binding Python ke exiv2 adalah:

Salah satu keuntungan pyexiv2 adalah tersedia build windows untuk python 2.7. Permintaan windows build untuk gexiv2 ada di sini: https://bugzilla.gnome.org/show_bug.cgi?id=712441

exiv2 dan semua binding adalah open source (GPL).

dlm
sumber
memperbarui ini berdasarkan info terbaru tentang binding ke exiv2
dlm
pyexiv2telah bercabang: py3exiv2.tuxfamily.org .
Artem Klevtsov
Tilloy.net tautan mati
jtlz2
5

Artikel ini menjelaskan modul Python untuk menulis metadata EXIF ​​(dan tidak hanya membacanya) menggunakan Python murni. Rupanya, tidak ada PIL, pyexif, atau EXIF-py yang mendukung penulisan EXIF. pyexiv2 tampaknya paling mutakhir dan khusus untuk platform.

Jason R. Coombs
sumber
Tidak yakin apakah ini bisa dianggap sebagai kekurangan berdarah.
Fisikawan Gila
5

Gunakan PIL :)

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')
Max
sumber
1
Pure PIL / Pillow tidak mengizinkan modifikasi tag EXIF. Tapi ada perpustakaan kecil yang membantunya: github.com/hMatoba/Pyxif
Simon Steinberger
4

Halaman di http://redmine.yorba.org/projects/gexiv2/wiki (menjadi https://wiki.gnome.org/Projects/gexiv2 ) berbunyi sekarang :

Ini akan bekerja sama baiknya dengan Python 2 atau 3, yang menjadikan GExiv2 pengganti yang sangat baik untuk pyexiv2, yang hanya mendukung Python 2.

Jadi, Python2 dan Python3 sekarang didukung oleh GExiv2.

Kabar baik.

jno
sumber
2
tautan tidak berfungsi. ini berfungsi wiki.gnome.org/Projects/gexiv2
user881300
pembaruan yang bagus! 3 tahun telah berlalu sejak 2013 ...
jno
3

Anda juga dapat melihat pustaka jpeg.py Gheorghe Milas di http://www.emilas.com/jpeg/ , yang merupakan "Pustaka python untuk mengurai, membaca, dan menulis JPEG EXIF, IPTC, dan metadata COM."

Kekurangannya adalah dia tampaknya menghosting domainnya pada IP dinamis melalui DynDNS, jadi domainnya tidak selalu tersedia.


sumber
Sudah tidak ada lagi.
Simon Steinberger
3

entah bagaimana saya mendapatkan atributError untuk _getexif dengan kode Paolo di atas .. Saya menggunakan Python 2.6.6 dan PIL 1.1.7. Apakah _getexif sudah usang sekarang ??

Ini modifikasi kecil yang berhasil untuk saya.

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
berang-berang
sumber
3

Saya mulai menulis perpustakaan kecil saya sendiri yang didasarkan pada kode di PIL. periksa di sini .

Albert
sumber
1
Hei, itu terlihat bagus. Adakah ujung yang tajam dengan itu?
Kaya
@ Rich: Saya tidak ingat lagi. Ini berhasil untuk ku.
Albert
3

Saya telah menggunakan pembungkus saya sendiri di sekitar http://www.sno.phy.queensu.ca/~phil/exiftool/ - alasannya adalah sangat lengkap, devnya sangat aktif. Dan tidak dapat mendukung hampir semua format gambar adalah penghenti mutlak untuk proyek yang dibutuhkannya

Kelemahannya tentu saja ini bukan python, jadi Anda perlu menggunakan panggilan subproses, seperti yang saya lakukan.

Geert Dekkers
sumber
Ada pembungkus python untuk exiftool github.com/smarnach/pyexiftool . Satu suara untuk exiftool karena fakta itu sangat lengkap.
Long Vu
Dia meminta lib Python.
Diego Woitasen
1

Ada beberapa contoh penggunaan PIL dan EXIF.py di ASPN

Michał Niklas
sumber
0

Dalam Python 2.6 tempat modul berbeda. Gunakan ini:

import Image    
from ExifTags import TAGS
Tomasz Nazar
sumber