ไลบรารีการจัดการ Exif สำหรับ python [ปิด]


108

ฉันกำลังมองหาไลบรารีการจัดการ exif (รูปแบบไฟล์ภาพที่แลกเปลี่ยนได้) สำหรับ python ฉันชอบความยืดหยุ่น (เช่นความสามารถในการดึงแท็กที่เป็นกรรมสิทธิ์ของผู้ให้บริการ) มากกว่าความเร็วในการประมวลผล คุณจะแนะนำอะไร


บางทีคำถามควรอ่าน: "มีตัวเลือกใดบ้างในการแก้ไข Exif (รูปแบบไฟล์ภาพที่แลกเปลี่ยนได้) โดยใช้ python ที่เน้นชุดคุณลักษณะ (เช่นความสามารถในการดึงแท็กที่เป็นกรรมสิทธิ์ของผู้ให้บริการและความเข้ากันได้กับรูปแบบภาพที่หลากหลาย) ด้วยความเร็ว"
dlm

1
@Wooble et al: "หากคำถามนี้สามารถปรับเปลี่ยนให้เข้ากับกฎในศูนย์ช่วยเหลือได้โปรดแก้ไขคำถามหรือแสดงความคิดเห็น" ฉันทำอย่างหลัง แต่ Q ปิดโดยไม่มีความคิดเห็นเพิ่มเติม สิ่งที่ช่วยให้? (เพียงแค่พยายามทำความเข้าใจและไม่ต้องการเสียเวลาแสดงความคิดเห็น / แก้ไขคำถามหากเป็นข้อสรุปที่เกิดขึ้นก่อนหน้านี้)
dlm

ฉันต้องการความคิดเห็นของนักพัฒนาคนอื่น ๆ เมื่อถามคำถามนี้! PackageOpinionOverflow?
Derek Litz

1
โปรดทราบว่าโซลูชันที่ไม่ใช่ exiv2 ทั้งหมดที่นี่จะไม่สามารถเข้าถึงMakerNoteได้ ในแท็ก EXIF ​​นี้ผู้ผลิตกล้องจะเพิ่มแท็กของตนเองเพื่อเก็บข้อมูลที่มีค่า ดังนั้นคุณจะได้รับเฉพาะแท็กพื้นฐานกับไลบรารีส่วนใหญ่จากคำตอบด้านล่าง
user136036

คำตอบ:


65

คุณอาจต้องการตรวจสอบexif-py :

ไลบรารี Python เพื่อดึงข้อมูล EXIF ​​จากไฟล์ tiff และ jpeg ใช้งานง่ายมาก - $ ./EXIF.py image.jpg

หรือPython Imaging Library (PIL) :

Python Imaging Library (PIL) เพิ่มความสามารถในการประมวลผลภาพให้กับล่าม Python ของคุณ ไลบรารีนี้รองรับไฟล์หลายรูปแบบและมีความสามารถในการประมวลผลภาพและกราฟิกที่มีประสิทธิภาพ

นอกจากนี้ยังมีชื่อ pyexif ที่เหมาะ: http://pyexif.sourceforge.net/

ไลบรารี pyexif python และเครื่องมือมีจุดมุ่งหมายเพื่อดึงข้อมูล EXIF ​​จากไฟล์ Jpeg และ Tiff ซึ่งรวมอยู่ด้วย โดยทั่วไปข้อมูลนี้จะรวมอยู่ในภาพที่สร้างโดยใช้อุปกรณ์ถ่ายภาพดิจิทัลเช่นกล้องดิจิทัลเครื่องสแกนฟิล์มดิจิทัลเป็นต้น

อย่างไรก็ตามดูเหมือนว่า pyexif จะไม่ได้รับการอัปเดตในขณะนี้ พวกเขาแนะนำหากพวกเขาไม่ได้ทำเคล็ดลับในการตรวจสอบ EXIF-py ดังนั้นคุณควรลองใช้ก่อนเนื่องจากหน้า sourceforge ของพวกเขาดูเหมือนจะมีกิจกรรมบางอย่างที่นั่นเมื่อเร็ว ๆ นี้แม้ว่าจะไม่มากนัก ในที่สุดการใช้ PIL คุณสามารถทำได้:

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

คำเตือน :
ฉันไม่รู้ว่าอันไหนดีที่สุดนี่เป็นเพียงสิ่งที่ฉันสามารถรวมเข้ากับ Google ได้ :)


20
"โซลูชัน" เหล่านี้ไม่สามารถเขียนแท็ก EXIF ​​กลับได้ดังนั้นจึงไม่ใช่วิธีแก้ปัญหาสำหรับคำถาม
odinho - Velmont

23
แม้ว่าในทางเทคนิคจะไม่อนุญาตให้เขียนแท็ก EXIF ​​แต่ฉันพบว่าสิ่งนี้มีประโยชน์มาก +1 สำหรับการเขียนโค้ด
Cerin

3
ไม่มี PIL สำหรับ Python 3.x
มากกว่า 5

ภาพรวมที่ดี หมายเหตุ: ปัจจุบัน exif-py ไม่สามารถใช้งานร่วมกับ Python 3.x ได้ (ทดสอบด้วย Python 3.3.3 ดูที่github.com/ianare/exif-py/issues/12 ด้วย )
cel

3
@MoreThanFive มีส้อม PIL ที่ได้รับการดูแลอย่างดีและรวมเข้ากับpip! github.com/python-pillow/Pillow
ibizaman

59

ฉันใช้pyexiv2เมื่อไม่นานมานี้เองและดูเหมือนว่าจะเหมาะกับความต้องการของฉันเป็นอย่างดี บางทีมันอาจเหมาะกับคุณเช่นกัน


9
สำหรับบันทึก: pyexiv2 ดูเหมือนจะได้รับการดูแลอย่างดีที่สุดและสมบูรณ์ที่สุด (รวมถึงการเขียนแท็ก EXIF ​​กลับไปที่ไฟล์)
rbp

1
pyexiv2 สามารถติดตั้งภายใน Virtualenv ได้อย่างง่ายดายหรือไม่?
Matt Austin

2
ดูเหมือนว่าการบำรุงรักษาจะช้าลงและการติดตั้งบน Mac ก็เป็นเรื่องยาก : /
Vortexfive

6
สำหรับผู้ที่สนใจ: น่าเสียดายที่ pyexiv2 สามารถใช้ได้กับ Python 2 เท่านั้น
texnic

1
<QUOTE src = " redmine.yorba.org/projects/gexiv2/wiki "> สิ่งนี้จะทำงานได้ดีพอ ๆ กันกับ Python 2 หรือ 3 ซึ่งทำให้ GExiv2 สามารถทดแทน pyexiv2 ได้อย่างดีเยี่ยมซึ่งรองรับเฉพาะ Python 2 เท่านั้น </QUOTE>
jno

31

โซลูชันที่ใช้ Exiv2

Exiv2 (exiv2: http://exiv2.org/ ) เป็นไลบรารี C ++ โอเพ่นซอร์สสำหรับผู้ใหญ่ที่รองรับการอ่านและเขียนข้อมูลเมตาไปยังรูปภาพหลายประเภท (JPEG, PNG, TIFF และรูปแบบดิบจำนวนมาก) เข้าใจมาตรฐาน (Xmp, IPTC และ Exif) และข้อมูลเมตาที่ไม่ได้มาตรฐาน ("Makernotes") และทำงานบนหลายแพลตฟอร์ม (Windows, Linux และสำหรับงานบางอย่าง Mac)

การผูก Python กับ exiv2 คือ:

  • gexiv2 (การเชื่อมโยงหลายภาษา แต่ใช้ได้กับ python 2.6 / 2.7 / 3.X): https://wiki.gnome.org/gexiv2
  • pyexiv2 (ไม่รองรับอีกต่อไป แต่ใช้ได้กับ python 2.6 / 2.7): http://tilloy.net/dev/pyexiv2/

ข้อดีอย่างหนึ่งของ pyexiv2 คือมี windows build สำหรับ python 2.7 คำขอสร้าง windows สำหรับ gexiv2 อยู่ที่นี่: https://bugzilla.gnome.org/show_bug.cgi?id=712441

exiv2 และการเชื่อมโยงเป็นโอเพ่นซอร์ส (GPL) ทั้งหมด


อัปเดตตามข้อมูลล่าสุดเกี่ยวกับการเชื่อมโยงกับ exiv2
dlm

pyexiv2ได้รับการคดเคี้ยว: py3exiv2.tuxfamily.org
Artem Klevtsov

tilloy.net link dead
jtlz2

5

บทความนี้อธิบายถึงโมดูล Python สำหรับการเขียนข้อมูลเมตา EXIF ​​(ไม่ใช่แค่การอ่าน) โดยใช้ Python ล้วนๆ เห็นได้ชัดว่าไม่มี PIL, pyexif หรือ EXIF-py ที่รองรับการเขียน EXIF pyexiv2 ดูเหมือนจะมีเลือดออกและเฉพาะแพลตฟอร์ม


ไม่แน่ใจว่านี่ถือได้ว่ามีเลือดออกน้อยหรือไม่
Mad Physicist

5

ใช้ 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')

1
Pure PIL / Pillow ไม่อนุญาตให้แก้ไขแท็ก EXIF แต่มีห้องสมุดขนาดเล็กที่ช่วยในเรื่องนี้: github.com/hMatoba/Pyxif
Simon Steinberger

4

หน้าเว็บที่http://redmine.yorba.org/projects/gexiv2/wiki (กลายเป็นhttps://wiki.gnome.org/Projects/gexiv2 ) อ่านตอนนี้ :

สิ่งนี้จะทำงานได้ดีพอ ๆ กันกับ Python 2 หรือ 3 ซึ่งทำให้ GExiv2 สามารถทดแทน pyexiv2 ได้อย่างยอดเยี่ยมซึ่งรองรับเฉพาะ Python 2 เท่านั้น

ดังนั้นทั้ง Python2 และ Python3 จึงได้รับการสนับสนุนโดย GExiv2

ข่าวดี.


2
ลิงก์ไม่ทำงาน ใช้งานได้wiki.gnome.org/Projects/gexiv2
user881300

อัพเดทดี! 3 ปีผ่านไปตั้งแต่ปี 2556 ...
jno

3

คุณอาจดูห้องสมุด jpeg.py ของ Gheorghe Milas ที่http://www.emilas.com/jpeg/ซึ่งเป็น "ไลบรารี python สำหรับแยกวิเคราะห์อ่านและเขียนข้อมูลเมตา JPEG EXIF, IPTC และ COM"

ข้อเสียคือดูเหมือนว่าเขาจะโฮสต์โดเมนของเขาบนไดนามิก IP ผ่าน DynDNS ดังนั้นจึงไม่สามารถใช้ได้เสมอไป


ไม่มีอยู่อีกต่อไป
Simon Steinberger

3

ฉันได้รับ attributeError สำหรับ _getexif ด้วยรหัสของ Paolo ด้านบน .. ฉันใช้ Python 2.6.6 และ PIL 1.1.7 _getexif ล้าสมัยแล้วหรือยัง ??

นี่คือการปรับเปลี่ยนเล็กน้อยที่ได้ผลสำหรับฉัน

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 ตรวจสอบได้ที่นี่


1
เฮ้นั่นดูดี มีขอบคมด้วยหรือไม่?
รวย

@ ริช: ฉันจำไม่ได้แล้ว มันได้ผลสำหรับฉัน
Albert

3

ฉันใช้เครื่องห่อของตัวเองรอบ ๆhttp://www.sno.phy.queensu.ca/~phil/exiftool/ - เหตุผลก็คือมันสมบูรณ์มากนักพัฒนามีการใช้งานมาก และการไม่รองรับรูปแบบภาพเกือบทั้งหมดถือเป็นสิ่งที่จำเป็นสำหรับโปรเจ็กต์

ข้อเสียเปรียบแน่นอนคือมันไม่ใช่ python ดังนั้นคุณจะต้องใช้การเรียกกระบวนการย่อยเหมือนที่ฉันทำ


มีเสื้อคลุมหลามสำหรับ exiftool github.com/smarnach/pyexiftool หนึ่งคะแนนสำหรับ exiftool สำหรับความจริงที่ว่ามันสมบูรณ์มาก
Long Vu

เขาขอ Python lib
Diego Woitasen


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.