Praca z obrazami w Pythonie
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 Pillow Instalowanie 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 ()