PIL je Python Imaging Library, která poskytuje pythonovému interpretu možnosti úpravy obrázků. Byl vyvinut Fredrikem Lundhem a několika dalšími přispěvateli. Pillow je přátelská vidlička PIL a snadno použitelná knihovna vyvinutá Alexem Clarkem a dalšími přispěvateli. Budeme pracovat s Polštářem.
Instalace:
- Linux: Na linuxovém terminálu zadejte následující:
pip install PillowInstalace pipu přes terminál:sudo apt-get update
sudo apt-get install python-pip - Windows: Stáhnout příslušný balíček Pillow podle vaší verze pythonu. Ujistěte se, že stahujete podle verze pythonu, kterou máte.
Zde budeme pracovat s Image Module, který poskytuje stejnojmennou třídu a poskytuje mnoho funkcí pro práci s našimi obrázky. Chcete-li importovat modul Image, náš kód by měl začínat následujícím řádkem:
from PIL import ImageOperace s obrázky:
- Otevřete konkrétní obrázek z cesty: Python
#img = Image.open(path) # On successful execution of this statement # an object of Image type is returned and stored in img variable) try: img = Image.open(path) except IOError: pass # Use the above statement within try block as it can # raise an IOError if file cannot be found # or image cannot be opened.
- Načíst velikost obrázku : Vytvořené instance třídy Image mají mnoho atributů, jedním z jejich užitečných atributů je velikost. Python
Některé další atributy jsou: Image.width Image.height Image.format Image.info atd.from PIL import Image filename = 'image.webp' with Image.open(filename) as image: width height = image.size #Image.size gives a 2-tuple and the width height can be obtained
- Uložit změny v obrázku: Chcete-li uložit jakékoli změny, které jste provedli v souboru obrázku, musíme zadat cestu a formát obrázku. Python
img.save(path format) # format is optional if no format is specified #it is determined from the filename extension
- Otočení obrázku: Otočení obrazu potřebuje úhel jako parametr, aby se obraz otočil. Python
from PIL import Image def main(): try: #Relative Path img = Image.open('picture.webp') #Angle given img = img.rotate(180) #Saved in the same relative location img.save('rotated_picture.webp') except IOError: pass if __name__ == '__main__': main()
Poznámka: Jako jeden z argumentů metody otočení je k dispozici volitelný příznak rozbalení, který, pokud je nastaven na hodnotu true, rozšíří výstupní obraz tak, aby byl dostatečně velký, aby pojal celý otočený obraz. Jak je vidět ve výše uvedeném úryvku kódu, použil jsem relativní cestu, kde je můj obrázek umístěn ve stejném adresáři jako můj soubor kódu python, lze také použít absolutní cestu.
- Oříznutí obrázku: Image.crop(box) převezme 4 n-tice (vlevo nahoře vpravo dole) pixelové souřadnice a vrátí obdélníkovou oblast z použitého obrázku. Python
from PIL import Image def main(): try: #Relative Path img = Image.open('picture.webp') width height = img.size area = (0 0 width/2 height/2) img = img.crop(area) #Saved in the same relative location img.save('cropped_picture.webp') except IOError: pass if __name__ == '__main__': main()
- Změna velikosti obrázku: Image.resize(velikost)- Zde je velikost uvedena jako 2-násobek šířky a výšky. Python
from PIL import Image def main(): try: #Relative Path img = Image.open('picture.webp') width height = img.size img = img.resize((width/2 height/2)) #Saved in the same relative location img.save('resized_picture.webp') except IOError: pass if __name__ == '__main__': main()
- Vložení obrázku na jiný obrázek: Druhým argumentem může být 2 n-tice (určující levý horní roh) nebo 4 n-tice (vlevo nahoře vpravo dole) – v tomto případě musí velikost vloženého obrázku odpovídat velikosti tohoto pole nebo None, což je ekvivalentní (0 0). Python
from PIL import Image def main(): try: #Relative Path #Image on which we want to paste img = Image.open('picture.webp') #Relative Path #Image which we want to paste img2 = Image.open('picture2.webp') img.paste(img2 (50 50)) #Saved in the same relative location img.save('pasted_picture.webp') except IOError: pass if __name__ == '__main__': main() ##An additional argument for an optional image mask image is also available.
- Získání histogramu obrázku: Tím se vrátí histogram obrázku jako seznam počtu pixelů jeden pro každý pixel v obrázku. (Histogram obrázku je grafické znázornění tonálního rozložení v digitálním obrázku. Obsahuje všechny hodnoty jasu obsažené v obrázku. Vykresluje počet pixelů pro každou hodnotu jasu. Pomáhá při nastavení expozice.) z PIL import Image Python
def main(): try: #Relative Path img = Image.open('picture.webp') #Getting histogram of image print img.histogram() except IOError: pass if __name__ == '__main__': main()
- Transponování obrázku: Tato funkce nám poskytuje zrcadlový obraz obrazu Python
from PIL import Image def main(): try: #Relative Path img = Image.open('picture.webp') #transposing image transposed_img = img.transpose(Image.FLIP_LEFT_RIGHT) #Save transposed image transposed_img.save('transposed.webp') except IOError: pass if __name__ == '__main__': main()
- Rozdělte obrázek do jednotlivých pásem: Rozdělením obrazu v režimu RGB se vytvoří tři nové obrazy, z nichž každý obsahuje kopii původních jednotlivých pásů. Python
from PIL import Image def main(): try: #Relative Path img = Image.open('picture.webp') #splitting the image print img.split() except IOError: pass if __name__ == '__main__': main()
- tobitmapa: Převod obrázku na bitmapu X11 (formát binárního obrázku s prostým textem). Vrací řetězec obsahující bitmapu X11, lze jej použít pouze pro obrázky v režimu 1, tj. černobílé obrázky s 1 bitovým pixelem. z importu PIL Obrázek Python
def main(): try: #Relative Path img = Image.open('picture.webp') print img.mode #converting image to bitmap print img.tobitmap() print type(img.tobitmap()) except IOError: pass if __name__ == '__main__': main()
- Vytvoření miniatury: Tato metoda vytvoří miniaturu obrázku, který je otevřen. Nevrací nový objekt obrázku, ale provádí úpravy na místě aktuálně otevřeného objektu obrázku samotného. Pokud nechcete měnit původní objekt obrázku, vytvořte kopii a poté použijte tuto metodu. Tato metoda také vyhodnocuje vhodné zachovat poměr stran obrazu podle předané velikosti. z importu PIL Obrázek Python
def main(): try: #Relative Path img = Image.open('picture.webp') #In-place modification img.thumbnail((200 200)) img.save('thumb.webp') except IOError: pass if __name__ == '__main__': main()