Python Imaging Library PIL Библиотека для работы с изображениями в Python.

Презентация:



Advertisements
Похожие презентации
Использование графических методов. DRAW.BEGIN(DRAWAREA1) DRAW.BEGIN(FMain) DRAW.LINE (X1,Y1,X2,Y2) Использование графических методов. С помощью методов.
Advertisements

Презентация к уроку информатики 7 класс Автор: Юдин Андрей Борисович МКОУ Плесская СОШ.
Краткое ознакомление с Python Multimedia Services Дудин Виктор Санкт - Петербургский Государственный Университет 14 мая 2010 г.
Графика REM, SCREEN, LINE, PSET, CIRCLE, PAINT, DRAW…
Технология обработки графической информации Елена Александровна Михлякова, учитель информатики и ИКТ МОУ СОШ с уиоп д. Стулово Слободского района Кировской.
Задание графического режима Линия Прямоугольник Окружность Эллипс Дуга выход Тест 2Тест 1 содержание.
Назначение растровой и векторной графики? Растровая графика Применяется при разработке электронных и полиграфических изданий Большинство.
Тест по теме: «Графический редактор PAINT» Тест 1. Графический редактор.Графический редактор. Тест 2. Графический редактор Paint.Графический редактор Paint.
Да будет цвет!. Черно-белое изображение
Dim graph1 As Graphics (устанавливает ИМЯ объекта области рисования) Dim pen1 As New Pen(Color.Red, 1) (устанавливает ЦВЕТ и ТОЛЩИНУ пера) Dim brush1 As.
Двоичное кодирование графической информации в компьютере.
Графика в QBasic Qbasic является векторным графическим редактором, т.е. графические элементы строятся (вычисляются) по формулам. Для этого достаточно задать.
Познакомиться с созданием рисунков в QBasic, изучить графические примитивы, научиться их применять на практике.
Компьютерные изображения РастровыеВекторныеФрактальные.
PhotoShop Знакомство. Создание нового документа Чтобы создать новый документ в Photoshop, нажмите File > New из Горизонтального меню.
Оператор SCREEN графический оператор, устанавливающий режим и другие характеристики экрана формат записи SCREEN [режим], где режим целое выражение, указывающее.
Основные понятия компьютерной графики. Виды графических элементов Иллюстрации, фотографии, чертежи, схемы Функциональные графические элементы, различные.
1 Графика в Pascal Модуль Graph. 2 Подключение дополнительных библиотек Для работы в графическом режиме необходимо подключение модуля Graph. Первой инструкцией.
Операторы графики. Ориентация и информационная емкость графического экрана (0,0) х Пиксел - минимальный элемент изображения Y Номер режима Формат текста.
Информатика – 9 -11класс Булатова А.В. учитель информатики МОУ СОШ 20.
Транксрипт:

Python Imaging Library PIL Библиотека для работы с изображениями в Python

Обзор применений библиотеки Image Archives Image Archives PIL идеально подходит для архивных изображений и приложений пакетной обработки. Можно использовать библиотеку для создания эскизов, печати изображений и т. д. Image Display Image Display Для отладки существует show method, который сохраняет изображения на диск и призывает внешние утилиты просмотров Image Processing Image Processing Библиотека содержит базовые функции обработки изображений, в том числе цветовых преобразований пространства, изменение размера изображения, вращение и произвольных аффинных преобразований

Загрузка готового изображения open() open( [, mode = r]) Откроем файл foto.gif, расположенный в текущем рабочем каталоге : img = Image.open("foto.gif")

Вместо указания пути к файлу можно передать файловый объект, открытый в бинарном рижиме : # Открываем файл в бинарном режиме f = open("foto.gif", "rb") # Передаем объект файла img = Image.open(f) # Получаем размер изображения img.size (800, 600) f.close() # Закрываем файл

Загрузка изображения из строки : Загрузка изображения из строки : Модуль StringIO # Открываем файл в бинарном режиме f = open("foto.gif", "rb") # Сохраняем изображение в переменной i = f.read() f.close() # Закрываем файл # Подключаем модуль StringIO import StringIO # Передаем объект img = Image.open(StringIO.StringIO(i)) img.format # Выводим формат изображения 'GIF'

Получение и изменение цвета пиксела : Получение и изменение цвета пиксела : load() img = Image.open("foto.jpg") obj = img.load() obj[25, 45] # Получаем цвет пикселя (122, 86, 62) # Задаем цвет пикселя (красный) obj[25, 45] = (255, 0, 0)

Использование методов и Использование методов getpixel() и putpixel() img = Image.open("foto.jpg") # Получаем цвет пикселя img.getpixel ((25, 45)) (122, 86, 62) # Изменяем цвет пикселя img.putpixel ((25, 45), (255, 0, 0)) # Получаем цвет пикселя img.getpixel ((25, 45)) (255, 0, 0) img.show() # Просматриваем изображение

Сохранение изображения Сохранение изображения save() # В формате JPEG img.save("tmp.jpg") # В формате BMP img.save("tmp.bmp", "BMP") f = open("tmp2.bmp", "wb") # Передаем файловый объект img.save(f, "BMP") f.close()

Создание нового изображения new () new(, [, ]) : : 1 – 1 бит, черно - белое L – 8 бит, черно - белое P – 8 бит, цветное (256 цветов ) RGB – 24 бита, цветное RGBA – 32 бита, цветное с альфа - каналом CMYK – 32 бита, цветное YCbCr – 24 бита, цветное, видеоформат I – 32 бита, целое число, цветное F - 32 бита, вещественное число, цветное

: : (, ) : : img = Image.new("RGB", (100, 100)) img.show() # Черный квадрат img = Image.new("RGB", (100, 100), (255, 0, 0)) img.show() # Красный квадрат img = Image.new("RGB", (100, 100), "green") img.show() # Зеленый квадрат img = Image.new("RGB", (100, 100), "#f00") img.show() # Красный квадрат

Получение информации об изображении - позволяют следующие атрибуты : size size format format ( например, GIF, JPEG) mode mode (P, RGB, CMYK) info info

Манипулирование изображением copy() from PIL import Image # Подключаем модуль img = Image.open("foto.jpg") # Открываем файл img2 = img.copy() # Создаем копию img2.show() # Просматриваем копию

thumbnail() - создает уменьшенную версию изображения указанного размера thumbnail ( [, ]) Image.open("foto.jpg") img.size # Исходные размеры изображения (800, 600) img.thumbnail((400, 300), Image.ANTIALIAS) img.size # Изменяется само изображение (400, 300) img = Image.open("foto.jpg") img.thumbnail((400, 100), Image.ANTIALIAS) img.size # Размер изменяется пропорционально (133, 100) Фильтры NEAREST, BILINEAR, BICUBIC или ANTIALIAS

rotate() rotate( [, ] [, expand=0] ) img = Image.open("foto.jpg") img.size # Исходные размеры изображения (800, 600) img2 = img.rotate(90)# Поворот на 90 градусов img2.size (600, 800) img3 = img.rotate(45, Image.NEAREST) img3.size # Размеры сохранены, изображение обрезано (800, 600) img4 = img.rotate(45, expand=True) img4.size # Размеры увеличены, изображение полное (991, 990)

paste() paste(, [, ]) # Закрасим область красным цветом img = Image.open("foto.jpg") img.paste( (255, 0, 0), (0, 0, 100, 100) ) img.show() # Зальем все изображение зеленым цветом img = Image.open("foto.jpg") img.paste( (0, 128, 0), img.getbbox() ) img.show() getbbox() img.getbbox() (0, 0, 800, 600)

convert() img = Image.open("foto.jpg") img.mode 'RGB' img2 = img.convert("RGBA") img2.mode 'RGBA' img2.show()

Рисование линий и фигур Чтобы на изображении можно было рисовать, необходимо создать экземпляр класса Draw: # Подключаем модули from PIL import Image, ImageDraw img = Image.new ("RGB", (300, 300), (255, 255, 255)) # Создаем экземпляр класса draw = ImageDraw.Draw(img)

Класс Draw предоставляет следующие методы : point – рисует точку from PIL import Image, ImageDraw img = Image.new ("RGB", (300, 300), (255, 255, 255)) draw = ImageDraw.Draw(img) for n in xrange (5, 31): draw.point ( (n, 5), fill=(255, 0, 0) ) img.show()

line – рисует линию между двумя координатами draw.line ( (0, 0, 0, 300), fill=(0, 128, 0) ) draw.line ( (297, 0, 297, 300), fill=(0, 128, 0), width=3 ) img.show()

rectangle - рисует прямоугольник draw.rectangle ( (10, 10, 30, 30), fill=(0, 0, 255), outline=(0, 0, 0) ) draw.rectangle ( (40, 10, 60, 30), fill=(0, 0, 128)) draw.rectangle ( (0, 0, 299, 299), outline=(0, 0, 0)) img.show()

polygon - рисует многоугольник draw.polygon ((50, 50, 150, 150, 50, 150), outline=(0,0,0), fill=(255, 0, 0)) # Треугольник draw.polygon ( (200, 200, 250, 200, 275, 250, 250, 300, 200, 300, 175, 250), fill=(255, 255, 0)) img.show()

ellipse – рисует эллипс draw.ellipse ((100, 100, 200, 200), fill=(255, 255, 0)) draw.ellipse ((50, 170, 150, 300), outline=(0, 255, 255)) img.show()

Модуль aggdraw Если приглядеться к контурам фигур, созданных с помощью класса ImageDraw, то можно заметить, что граница отображается в виде ступенек. Сделать контуры более гладкими позволяет модуль aggdraw.

Сравнение класса ImageDraw и модуля aggdraw import aggdraw from PIL import Image, ImageDraw img = Image.new ("RGB", (300, 300), (255, 255, 255)) draw = ImageDraw.Draw(img) draw.ellipse ((0, 0, 150, 150), fill="red", outline="red") pen = aggdraw.Pen ("red", 0.5) brush = aggdraw.Brush ("red") draw2 = aggdraw.Draw(img) draw2.ellipse ((150, 150, 300, 300), pen, brush) draw2.flush() img.show()

Pen ( [, width=1] [, opacity=255]) - перо используется для вывода границы фигуры Brush ( [, opacity=255]) - кисть применяется для заливки

Класс Draw из модуля aggdraw предоставляет следующие методы : setantialias( ), flush() img = Image.new("RGB", (300, 300), (255, 255, 255)) draw = aggdraw.Draw(img) pen = aggdraw.Pen((255, 0, 0), 0.5) brush = aggdraw.Brush("#ff0000") draw.setantialias(False)# Сглаживание отключено draw.ellipse((0, 0, 150, 150), pen, brush) draw.setantialias(True)# Сглаживание включено draw.ellipse((150, 150, 300, 300), pen, brush) draw.flush() # Обновляем изображение img.show()

rectangle (,, ) pen = aggdraw.Pen("#000000") brush = aggdraw.Brush("orange") draw.rectangle ((40, 10, 60, 30), pen, brush) draw.rectangle ((0, 0, 299, 299), pen) draw.flush() img.show()

Вывод текста на изображение text (,, fill=, font= ) из модуля ImageDraw from PIL import Image, ImageDraw, ImageFont img = Image.new ("RGB", (300, 300), (255, 255, 255)) draw = ImageDraw.Draw(img) font = ImageFont.load_default() draw.text ((10, 10), "Hello", font=font, fill="red") img.show()

text (,, ) из модуля aggdraw Для создания объекта шрифта предназначена функция : Font(, [, size=12[, opacity=255] ])

import aggdraw from PIL import Image img = Image.new ("RGB", (300, 300), (255, 255, 255)) draw = aggdraw.Draw(img) font_file = r"C:\WINDOWS\Fonts\arial.ttf" font = aggdraw.Font ("red", font_file, size=24) txt = unicode ("Привет мир", "cp1251") draw.text ((10, 10), txt, font) draw.flush() img.show()

Создание скриншотов Библиотека PIL позволяет сделать снимок экрана ( скриншот ) можно получить как полную копию экрана, так и копию определенной прямоугольной области grab ([ ]) из модуля ImageGrab

from PIL import Image, ImageGrab img = ImageGrab.grab() img.save ("screen.bmp", "BMP") img.mode 'RGB' img2 = ImageGrab.grab ((100, 100, 300, 300)) img2.save ("screen2.bmp", "BMP") img2.size (200, 200)

Спасибо за внимание !