Přeskočit na obsah

Pillow/Otázky a odpovědi

Z Wikiverzity
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?