PIL to biblioteka obrazowania Pythona, która zapewnia interpreterowi Pythona możliwości edycji obrazów. Został opracowany przez Fredrika Lundha i kilku innych współpracowników. Pillow to przyjazny fork PIL i łatwa w użyciu biblioteka opracowana przez Alexa Clarka i innych współpracowników. Będziemy pracować z Pillow.
Instalacja:
- Linux: Na terminalu Linux wpisz następujące polecenie:
pip install PillowInstalowanie pip przez terminal:sudo apt-get update
sudo apt-get install python-pip - Okna: Pobierać odpowiedni pakiet Pillow zgodnie z wersją Pythona. Upewnij się, że pobierasz zgodnie z posiadaną wersją Pythona.
Będziemy tutaj pracować z modułem obrazu, który udostępnia klasę o tej samej nazwie i zapewnia wiele funkcji do pracy na naszych obrazach. Aby zaimportować moduł obrazu, nasz kod powinien zaczynać się od następującej linii:
from PIL import ImageOperacje na obrazach:
- Otwórz konkretny obraz ze ścieżki: 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.
- Pobierz rozmiar obrazu : Utworzone instancje klasy Image mają wiele atrybutów, jednym z jej przydatnych atrybutów jest rozmiar. Python
Niektóre inne atrybuty to: Image.width Image.height Image.format Image.info itp.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
- Zapisz zmiany w obrazie: Aby zapisać zmiany dokonane w pliku obrazu, musimy podać ścieżkę i format obrazu. Python
img.save(path format) # format is optional if no format is specified #it is determined from the filename extension
- Obracanie obrazu: Obrót obrazu wymaga parametru kąta, aby obraz został obrócony. 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()
Uwaga: Jako jeden z argumentów metody obracania dostępna jest opcjonalna flaga rozwijania, która, jeśli jest ustawiona na wartość true, rozszerza obraz wyjściowy tak, aby był wystarczająco duży, aby pomieścić cały obrócony obraz. Jak widać w powyższym fragmencie kodu, użyłem ścieżki względnej, w której mój obraz znajduje się w tym samym katalogu, co mój plik kodu Pythona, można również użyć ścieżki bezwzględnej.
- Przycinanie obrazu: Image.crop(box) pobiera współrzędne 4-krotkowe (lewy górny, prawy dolny dolny) pikseli i zwraca prostokątny obszar z użytego obrazu. 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()
- Zmiana rozmiaru obrazu: Image.resize(size) — tutaj rozmiar jest podawany jako 2-krotna szerokość i wysokość. 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()
- Wklejanie obrazu do innego obrazu: Drugi argument może być krotką 2-krotną (określającą lewy górny róg) lub krotką 4-krotną (lewy górny, prawy dolny) - w tym przypadku rozmiar wklejanego obrazu musi odpowiadać rozmiarowi tego obszaru ramki lub Brakowi, co jest równoważne (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.
- Uzyskiwanie histogramu obrazu: Spowoduje to zwrócenie histogramu obrazu w postaci listy pikseli zliczanych po jednym dla każdego piksela na obrazie. (Histogram obrazu to graficzna reprezentacja rozkładu tonalnego na obrazie cyfrowym. Zawiera wszystkie wartości jasności zawarte w obrazie. Przedstawia liczbę pikseli dla każdej wartości jasności. Pomaga w ustawianiu ekspozycji.) 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()
- Transpozycja obrazu: Ta funkcja daje nam lustrzane odbicie 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()
- Podziel obraz na poszczególne pasma: Podział obrazu w trybie RGB powoduje utworzenie trzech nowych obrazów, z których każdy zawiera kopię oryginalnych pojedynczych pasm. 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()
- mapa bitowa: Konwersja obrazu na mapę bitową X11 (format obrazu binarnego zwykłego tekstu). Zwraca ciąg znaków zawierający bitmapę X11. Można go używać tylko w przypadku obrazów w trybie 1, tj. obrazów czarno-białych o rozdzielczości 1-bitowego piksela. z obrazu importu PIL 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()
- Tworzenie miniatury: Ta metoda tworzy miniaturę otwartego obrazu. Nie zwraca nowego obiektu obrazu, wprowadza modyfikacje na miejscu w samym aktualnie otwartym obiekcie obrazu. Jeśli nie chcesz zmieniać oryginalnego obiektu obrazu, utwórz kopię, a następnie zastosuj tę metodę. Metoda ta ocenia również, czy należy zachować proporcje obrazu w zależności od przekazanego rozmiaru. z obrazu importu PIL 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()