Pillow/Otázky a odpovědi

Jak používat klasifikační nálepkuTato stránka je součástí kurzu:
specifické předpoklady
Příslušnost: Juandev
Tato stránka není ještě hotová.

Pillow je knihovna přinášejícící možnosti do programovacího jazyka Python.

Jak se kurzu účastnit

editovat

Tento kurz je postaven na samostudiu, hledání informací na webu, YouTube, diskusí s AI typu chatGPT. Pokud ve Vašem studiu vyvstane nějaká otázka, či potřeba řešení, zapíšete níže do patřičné tabulky a když najdete řešení či opověď tak to opět přehledně zapíšete zde do tabulky. Pokud žádné otázky nemáte, můžete zkusit zodpověďět nezodpovězené otázky v tabulce níže.

Otázky

editovat
Č. Otázka Odpověď Poznámky
1 Proč se knihovna importuje jako PIL? Zřejmě proto, že se jedná o nástupce knihovny Python Imagining Library, která se volala jako PIL a po zkončení jejího rozvoje v roce 2011 vznikl Pillow jako její fork.
2 Je Pillow součástí standardní knihovny? Ne.
3 Co dělá ImageTk.PhotoImage? Jedná se o widget ImageTk na němž je umístěna metoda PhotoImage, která vytváří objekt obrázku (<class 'PIL.ImageTk.PhotoImage'>). Tomuto objektu pak rozumí widgety tk a ttk. Využívá se to tedy k posílání obrázků typu jpg do widgetů tk a ttk, protože třída tk.PhotoImage neumí jpg zpracovat na objekt využitelných v těchto widgetech.
...
jiny_obrazek_tk = ImageTk.PhotoImage(file = "/home/~/100CANON/kabrinec4d.jpg")

tlacitko = ttk.Button(okno, text = "tlačítko", image = jiny_obrazek_tk)
tlacitko.pack()
...
4 Co dělá Image.open? Otevírá obrázek z URL, bajtového řetězce či z lokálního umístění. Umožňuje ho tedy zpracovat před vytvořením objektu obrázku, který by se mohl využít ve widgetech.
5 Kde najdu kompletní dokumentaci knihovny? Třeba zde.
6 Jaké jsou atributy třídy Image?
  • filename - celý název souboru (řetězec)
  • format - formát souboru (řetězec)
  • mode - barevný model (např. RGB, CMYK; řetězec)
  • size - rozměry (ntice s čísly)
  • width - šířka (číslo)
  • height - výška (číslo)
  • palette - (instance ImagePalette), nebo None
  • info - exif v bitech (slovník)
  • is_animated - zjišťuje, jestli má obrázek více jak jeden rámeček, nemusí to ale znamenat, že se jedná o gif nebo něco podobného (bool)
  • n_frames - počet rámečků (číslo)
  • has_transparency_data - zjišťuje, jestli je v obrázku zmínka o transparentnosti (bool)
7 Jakým způsobem dekódovat slovník exifu?
8 Jak vytvořím thumbnail?
9 K čemu se používá Image.info? Zřejmě se jedná o metodu, která je využívána jinou metodou, například Image.open(). Proto nejde asi přímo použít, protože výstup je v bytes a je zakódován a není známé jakým kódováním.
10 Co dělá Image.load() a jak se liší od Image.open()? Automaticky se spouští s metodou Image.open().
11 Co znamenají jednotlivá čísla, ze slovníku, který je generován po zadání print(obrázek.getexif), {296: 2, 282: 72.0, 34853: 17287, 34665: 360, 271: 'Canon', 272: 'Canon EOS 90D', 315: '', 274: 1, 306: '2023:11:18 14:12:00', 531: 2, 33432: '', 283: 72.0}? Jedná se o decimální klíče tagů, tedy metainformací o daném obrázku. Dle exif standardu 2.3, ze kterého byl vygenerován tento zkrácený exif představují jednotlivé číselné kódy následující:
  • 296 - rozlišení obrázku v palcích (klíč Exif.Image.ResolutionUnit, hex 0x0128)
  • 282 - šířka v dpi (klíč Exif.Image.XResolution, hex 0x011a)
  • 34853 - hodnota odkazuje na místo, kde se necházejí gps data (klíč Exif.Image.GPSTag, hex 0x8825)
  • 34665 - hodnota ukazuje na místo, kde se nachází IFD tagy, tedy metainformace o souboru (klíč Exif.Image.ExifTag, hex 0x8769)
  • 271 - výrobce záznamového zařízení (klíč Exif.Image.Make, hex 0x010f)
  • 272 - model záznamového zařízení (klíč Exif.Image.Model, hex 0x0110)
  • 315 - vlastník záznamového zařízení (klíč Exif.Image.Artist, hex 0x013b)
  • 274 - orientace obrázku (klíč Exif.Image.Orientation, hex 0x0112)
  • 306 - datum a čas změny, tj. v případě záznamového zařízení datum a čas pořízení (klíč Exif.Image.DateTime, hex 0x0132)
  • 531 - poloha barvových informací o obrázku (tedy odstínu a sytosti), platí jen u komprimovaného jpg (klíč Exif.Image.YCbCrPositioning, hex 0x0213)
  • 33432 - informace o autorských právech (klíč Exif.Image.Copyright, hex 0x8298)
  • 283 - výška v pixelech (klíč Exif.Image.YResolution, hex 0x011b)

Podle výše uvedeného bysme tedy mohli záznam rozklíčovat následovně:

  • Rozlišení obrázku: 2 palce
  • Šířka: 72.0 DPI
  • Informace o GPS se nacházejí v IDF na pozici: 17287
  • IDF je uložen na pozici: 360
  • Výrobce záznamového zařízení: Canon
  • Model záznamového zařízení: Canon EOS 90D
  • Vlastní záznamového zařízení: (neuvedeno)
  • Orientace obrázku: 1 (tzn. obrázek je v normální pozici, není otočený)
  • Datum a čas pořízení: 2023:11:18 14:12:00 (tedy 18. listopadu 2023 ve 14:12.
  • Poloha barvových informací je na pozici: 2
  • Copyright: (neuvedeno)
  • Výška: 72.0 DPI px?
Číslo exif standardu je uloženo v samotném exifu a jde zjistit v bashi pomocí exiftool -EXIF:ExifVersion název souboru.
12 Kde jsou uloženy informace o exif verzi? Přímo v exifu. Klíč Exif.Photo.ExifVersion hex 0x9000, dec 36864.
13 Pokud exif 531 není v IFD, znamená to, že pozice 2 je tělo jpg?
14 Kde najdu nějaká svobodné ikony? Třeba zde.
15 Těží pillow data z EXIF, nebo TIFF metainformačního segmentu?
16 Kde najdu seznam všech dostupných Exif Tagů?

Řešení

editovat
Č. Co Jak Poznámky
1 Jak do Image.open zadat cestu k souboru? V uvozovkách. Pokud něco nefunguje, mohou být překlepy v cestě. Na Linuxu fungují i mezery v názvech adresářů, pokud je vše v závorce vedeno jako řetězec.
2 Jak zjistím verzi exif standardu?
3 Jak vygeneruje GPS obrázku?

Související otázky

editovat
Č. Otázka Odpověď Poznámky
1 Jaké jsou další části IFD? Například:
  • IFD 0 - pro primární obrázek
  • EXIF IFD
  • GPS IFD
  • IFD 1 pro náhledy obrázku tj. obrázek v menším rozlišení
Z tohoto rozdělení je vidět že Image File Directory (IFD) je spíš součástí TIFF metainformace, nežli EXIFu jako takového, protože samotný EXIF je pouze privátním tagem v rámci EXIFu. IFD může být kdekoliv v kódu obrázku ale je to tak, že na nové IFD je odkázáno vždy z konce předchodzího IFD. Hodnotou odkazuje je decimální tag.
2 Co je to IFD 0? IFD 0, neboli nultý image file directory je dle specifikace TIFF povinný segment metainformace se kterým by měl umět každý software pracovat.
3 Co je to primární obrázek? Tj. hlavní obrázek, protože vše je odvozeno z formátu TIFF, kde mohou být ještě vnořeny obrázky různých náhledů, tedy v různém rozlišení.
4 Co je to application marker segment (APP)? Jedná se o oblast, ve které lze u *.tiff or *.jpg souboru očekávat určitý typ metainformací. Jelikož se metainformace u těchto souborů objevují pokažde jinde, jsou marker segmenty jen obecným označením určujícím jaké typy metainformací se v ních budou vyskytovat.
5 Takže audio soubory nemají TIFF information, ale pouze EXIF chunks?
6 Co to je Flashpix? Formát obrazové bitmapy, který má v sobě obrázek uložen v několika rozlišeních. Při zobrazování na webu se nahraje pouze patřičné rozlišení tak, že nedochází k přetěžování přenosů.
7 Co je to bitmapa? Značí obrazový soubor složený z řad různě zbarvených pixelů. Jpeg je také bitmapa, ale obvykle se tak neoznačuje, protože obsahuje komprimaci.
8 Kde najdu TIFF Specification Supplement 2 ke stažení? Stejně jako supplement 1 ve webarchivu.
9 Co je to PostScript? Programovací jazyk určený k popisu technických dokumentů. Patří Adobe.
10 *.jpg soubory nemají obrázkové adresáře (image file directory), ale marker segments?