Работа с изображения в Python
PIL е библиотеката за изображения на Python, която предоставя на интерпретатора на Python възможности за редактиране на изображения. Разработен е от Фредрик Лунд и няколко други сътрудници. Pillow е удобната PIL вилица и лесна за използване библиотека, разработена от Алекс Кларк и други сътрудници. Ще работим с Pillow.
Инсталация:
- Linux: На терминала на linux въведете следното:
pip install Pillow Инсталиране на pip през терминал:
sudo apt-get update
sudo apt-get install python-pip - Windows: Изтегляне подходящия пакет възглавници според вашата версия на python. Уверете се, че изтегляте според версията на python, която имате.
Тук ще работим с Image Module, който предоставя клас със същото име и предоставя много функции за работа с нашите изображения. За да импортираме Image модула, нашият код трябва да започне със следния ред:
from PIL import ImageОперации с изображения:
- Отворете конкретно изображение от път: 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.
- Извличане на размера на изображението : Екземплярите на клас Image, които са създадени, имат много атрибути, един от неговите полезни атрибути е размерът. Python
Някои други атрибути са: Image.width Image.height Image.format Image.info и др.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
- Запазете промените в изображението: За да запазим промените, които сте направили във файла с изображение, трябва да дадем път, както и формат на изображението. Python
img . save ( path format ) # format is optional if no format is specified #it is determined from the filename extension
- Завъртане на изображение: Завъртането на изображението се нуждае от ъгъл като параметър, за да се завърти изображението. 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 ()
Забележка: Има незадължителен флаг за разширяване, наличен като един от аргументите на метода за завъртане, който, ако е зададен true, разширява изходното изображение, за да го направи достатъчно голямо, за да побере цялото завъртяно изображение. Както се вижда в горния кодов фрагмент, използвах относителен път, където моето изображение се намира в същата директория като моя кодов файл на python, може да се използва и абсолютен път. - Изрязване на изображение: Image.crop(box) взема 4-кортежна пикселна координата (ляво горе надясно долу) и връща правоъгълна област от използваното изображение. 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 ()
- Преоразмеряване на изображение: Image.resize(size) - Тук размерът е предоставен като ширина и височина от 2 кортежа. 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 ()
- Поставяне на изображение върху друго изображение: Вторият аргумент може да бъде 2-кортеж (посочващ горния ляв ъгъл) или 4-кортеж (ляво горе вдясно долу) - в този случай размерът на поставеното изображение трябва да съвпада с размера на тази област на полето или Няма, което е еквивалентно на (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.
- Получаване на хистограма на изображение: Това ще върне хистограма на изображението, тъй като списък от пиксели брои по един за всеки пиксел в изображението. (Хистограмата на изображение е графично представяне на тоналното разпределение в цифрово изображение. Тя съдържа какви са всички стойности на яркост, съдържащи се в изображението. Тя начертава броя пиксели за всяка стойност на яркост. Помага при извършване на настройките на експозицията.) от 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 ()
- Транспониране на изображение: Тази функция ни дава огледален образ на изображение 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 ()
- Разделете изображение на отделни ленти: Разделянето на изображение в режим RGB създава три нови изображения, всяко от които съдържа копие на оригиналните отделни ленти. 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 ()
- tobitmap: Преобразуване на изображение в X11 bitmap (формат на двоично изображение с обикновен текст). Връща низ, съдържащ растерно изображение X11, което може да се използва само за изображения в режим 1, т.е. черно-бели изображения с 1 бит пиксел. от 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 ()
- Създаване на миниатюра: Този метод създава миниатюра на изображението, което се отваря. Той не връща нов обект на изображение, а прави модификация на място в самия текущо отворен обект на изображение. Ако не искате да промените оригиналния обект на изображение, създайте копие и след това приложете този метод. Този метод също така оценява подходящото за поддържане на пропорциите на изображението според предадения размер. от 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 ()