Ugrás a fő tartalomra

Python képfeldolgozás EXIF és IPTC olvasás


A képek tartalma mellé, leírás, dátum, gps pozició, .. adatok is tárolhatok és kiolvashatok.  


EXIF : EXchangeable Image File format


Hasznos Modulok:


Exif


Installálás:

install exif



Használata:

###---------------------------------------------- 1.

from exif import Image

folder_path = r'c:/tmp'

img_filename = 'image_1.jpg'

img_path = f'{folder_path}/{img_filename}'

with open(img_path, 'rb') as img_file:

    img = Image(img_file)

print(img.has_exif)     ## lista

print(f'Make: {img.get("make")}')                                      ## készítő eszköz neve

print(f'Model: {img.get("model")}')                                    ## készítő eszköz modellje

print(f'DateTime (Original): {img.get("datetime_original")}'  ## kép készítési idő

#------- új attributum beállítása (Copyright)

img.copyright = 'Lajos Kecskeméti 2022.01.01'

img.artist = 'Dániel Kecskeméti'

#-------- Attributum törlés

img.delete('artist')

#-------- adatok állományba írása (új könyvtárba)

with open(f'{folder_path}/modified_{img_filename}', 'wb') as new_image_file:

        new_image_file.write(img.get_file())


###---------------------------------------------- 2.

image_path = "c:/tmp/IMG_KL_20220073.JPG"

metadata = pyexif.ExifEditor(image_path)

metadata.getTags() ## lista kikérése

metadata.getTag('Aperture') ## érték lekérdezése

metadata.setTag('Aperture', '3.4') ## érték beállítása/módosítása


PIL  (https://pypi.org/project/Pillow/)

Pillow. Számos képformátum betöltése és képek feldolgozása.

A függvénytár kiterjedt formátum támogatásának köszönhetően ideális megoldást kínál képek konvertálására és nézetképek (thumbnail) készítésére.

A beépített ablakkezelő keretrendszerek segítségével a képek feldolgozás közben megjeleníthetjük. 

A képek utólagos feldolgozása, manipulálása is lehetséges filterekkel és színtér konverziók segítségével.



Installálás:

pip install Pillow     ## installálás

pip list                    ## lista az eddig más installált modulokról


Használás



from PIL import Image

import PIL.ExifTags

img = Image.open(r"c:\Users\User\Downloads\IMG_20211224_170349.jpg")

exif = {

    PIL.ExifTags.TAGS[k]: v

    for k, v in img._getexif().items()

    if k in PIL.ExifTags.TAGS

}

for key in exif:

    print(key, '->', exif[key])


ImageWidth -> 2976
ImageLength -> 3968
BitsPerSample -> (8, 8, 8)
GPSInfo -> {0: b'\x02\x02\x00\x00', 1: 'N', 2: (47.0, 25.0, 38.772583), 3: 'E', 4: (19.0, 12.0, 29.116516), 5: b'\x00', 6: 178.2, 7: (16.0, 3.0, 49.0), 27: 'CELLID', 29: '2021:12:24'}
ResolutionUnit -> 2
ExifOffset -> 284
DeviceSettingDescription -> b'ipp\x00'
Make -> HUAWEI
Model -> EML-L29
Software -> EML-L29 10.0.0.192(C432E9R1P3)
Orientation -> 0
DateTime -> 2021:12:24 17:03:51
YCbCrPositioning -> 1
XResolution -> 72.0
YResolution -> 72.0
ExifVersion -> b'0210'
ComponentsConfiguration -> b'\x01\x02\x03\x00'
CompressedBitsPerPixel -> 0.95
DateTimeOriginal -> 2021:12:24 17:03:51
DateTimeDigitized -> 2021:12:24 17:03:51
ShutterSpeedValue -> 29.8973


from PIL import Image
from PIL.ExifTags import TAGS 
def get_exif(filename):
    image = Image.open(filename)
    image.verify()
    return image._getexif()
def get_labeled_exif(exif):
    labeled = {}
    for (key, val) in exif.items():
        labeled[TAGS.get(key)] = val
    return labeled
exif = get_exif(r"c:\Users\User\Downloads\IMG_20211224_170349.jpg")
labeled = get_labeled_exif(exif)
print('GPS pozició:  ', labeled['GPSInfo'][2])
print('GPS magasság: ', labeled['GPSInfo'][6] , ' méter')


GPS pozició:   (47.0, 25.0, 38.772583)
GPS magasság:  178.2  méter



IPTC információ kiolvasása






from PIL import Image, IptcImagePlugin

im = Image.open(r"c:\Users\User\Downloads\elefant_fashegycsucs.jpg")
iptc = IptcImagePlugin.getiptcinfo(im)

if iptc:
    for k, v in iptc.items():
        print("{} {}".format(k, repr(v.decode())))
else:
    print(" This image has no iptc info")

# https://iptc.org/std/photometadata/specification/IPTC-PhotoMetadata
def get_caption():
    return iptc.get((2,120)).decode()

print(get_caption())



1, 90) '\x1b%G'
(1, 0) '\x00\x04'
(2, 120) 'Elefánt átmenet kép a felhő felé'
(2, 122) 'Elephant'
(2, 105) 'Elephant'
(2, 80) 'klajosw@gmail.com'
(2, 85) 'Lajos Kecskeméti'
(2, 110) 'Saját'
(2, 115) 'Saját'
(2, 5) 'Elefánt kép'
(2, 55) '20220101'
(2, 90) 'Budapest'
(2, 92) 'XVIII'
(2, 95) 'PestLőrinc'
(2, 101) 'Hungary'
(2, 103) '1182'
(2, 116) 'Lajos Kecskeméti'
Elefánt átmenet kép a felhő felé


Minta : https://github.com/klajosw/python/blob/master/kl_py_img_pil.ipynb

hotpot.ai ingyen használható webszolgáltatás kép feldolgozások, ...

Megjegyzések