Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Получение информации об изображенииСодержание книги
Поиск на нашем сайте
Листинг 20.5. Получение информации об изображении >>> img = Image.open("foto.jpg") >>> img.size, img.format, img.mode ((800, 600), 'JPEG', 'RGB') >>> img.info {'jfif': 258, 'jfif_unit': 0, 'adobe': 100, 'progression': 1, 'jfif_version': (1, 2), 'adobe_transform': 100, 'jfif_density': (100, 100)} >>> img = Image.open("foto.gif") >>> img.size, img.format, img.mode ((800, 600), 'GIF', 'P') >>> img.info {'version': 'GIF89a', 'background': 254} >>> img = Image.open("foto.bmp") >>> img.size, img.format, img.mode ((800, 600), 'BMP', 'RGB') >>> img.info {'compression': 0} >>> img = Image.open("foto.tif") >>> img.size, img.format, img.mode ((800, 600), 'TIFF', 'RGB') >>> img.info {'compression': 'raw'} >>> img = Image.open("foto.png") >>> img.size, img.format, img.mode ((800, 600), 'PNG', 'RGB') >>> img.info {'dpi': (72, 72)} Манипулирование изображением >>> from PIL import Image >>> img = Image.open("foto.jpg") # Открываем файл >>> img2 = img.copy() # Создаем копию >>> img2.show() # Просматриваем копию
>>> img = Image.open("foto.jpg") >>> img.size # Исходные размеры изображения (800, 600) >>> img.thumbnail((400, 300), Image.LANCZOS) >>> img.size # Изменяется само изображение (400, 300) >>> img = Image.open("foto.jpg") >>> img.thumbnail((400, 100), Image.LANCZOS) >>> img.size # Размер изменяется пропорционально (133, 100)
>>> img = Image.open("foto.jpg") >>> img.size # Исходные размеры изображения (800, 600) >>> img2 = img.resize((400, 300), Image.LANCZOS) >>> img2.size # Пропорциональное уменьшение (400, 300) >>> img3 = img.resize((400, 100), Image.LANCZOS) >>> img3.size # Изображение будет искажено (400, 100)
>>> 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)
>>> img = Image.open("foto.jpg") >>> img2 = img.transpose(Image.FLIP_LEFT_RIGHT) >>> img2.show() # Горизонтальный зеркальный образ >>> img3 = img.transpose(Image.FLIP_TOP_BOTTOM) >>> img3.show() # Вертикальный зеркальный образ >>> img4 = img.transpose(Image.ROTATE_90) >>> img4.show() # Поворот на 90° против часовой стрелки >>> img5 = img.transpose(Image.ROTATE_180) >>> img5.show() # Поворот на 180° >>> img6 = img.transpose(Image.ROTATE_270) >>> img6.show() # Поворот на 270° >>> img7 = img.transpose(Image.TRANSPOSE) >>> img7.show() # Поворот на 90° по часовой стрелке
>>> img = Image.open("foto.jpg") >>> img2 = img.crop([0, 0, 100, 100]) # Помечаем фрагмент >>> img2.load() # Считываем фрагмент, создавая новое изображение >>> img2.size (100, 100)
>>> 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()
>>> img.getbbox() (0, 0, 800, 600)
>>> img = Image.open("foto.jpg") >>> img2 = img.resize((200, 150)) # Создаем миниатюру >>> img2.size (200, 150) >>> img.paste((255, 0, 0), (9, 9, 211, 161)) # Рамка >>> img.paste(img2, (10, 10)) # Вставляем миниатюру >>> img.show()
>>> img = Image.open("foto.jpg") >>> white = Image.new("RGB", (img.size[0],100), (255,255,255)) >>> mask = Image.new("L", (img.size[0], 100), 64) # Маска >>> img.paste(white, (0, 0), mask) >>> img.show()
>>> img = Image.open("foto.jpg") >>> img.mode 'RGB' >>> R, G, B = img.split() >>> mask = Image.new("L", img.size, 128) >>> img2 = Image.merge("RGBA", (R, G, B, mask)) >>> img2.mode 'RGBA' >>> img2.show()
>>> img = Image.open("foto.jpg") >>> img.mode 'RGB' >>> img2 = img.convert("RGBA") >>> img2.mode 'RGBA' >>> img2.show()
>>> img = Image.open("foto.jpg") >>> img.mode 'RGB' >>> img2 = img.convert("P", None, Image.FLOYDSTEINBERG, Image.ADAPTIVE, 128) >>> img2.mode 'P'
>>> from PIL import ImageFilter >>> img = Image.open("foto.jpg") >>> img2 = img.filter(ImageFilter.EMBOSS) >>> img2.show() Рисование линий и фигур >>> from PIL import Image, ImageDraw >>> img = Image.new("RGB", (300, 300), (255, 255, 255)) >>> draw = ImageDraw.Draw(img) # Создаем экземпляр класса
>>> from PIL import Image, ImageDraw >>> img = Image.new("RGB", (300, 300), (255, 255, 255)) >>> draw = ImageDraw.Draw(img) >>> for n in range(5, 31): draw.point((n, 5), fill=(255, 0, 0)) >>> img.show()
>>> draw.line((0, 0, 0, 300), fill=(0, 128, 0)) >>> draw.line((297, 0, 297, 300), fill=(0, 128, 0), width=3) >>> img.show()
>>> 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()
>>> 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()
>>> draw.ellipse((100, 100, 200, 200), fill=(255, 255, 0)) >>> draw.ellipse((50, 170, 150, 300), outline=(0, 255, 255)) >>> img.show()
>>> img = Image.new("RGB", (300, 300), (255, 255, 255)) >>> draw = ImageDraw.Draw(img) >>> draw.arc((10, 10, 290, 290), 180, 0, fill=(255, 0, 0)) >>> img.show()
>>> img = Image.new("RGB", (300, 300), (255, 255, 255)) >>> draw = ImageDraw.Draw(img) >>> draw.chord((10, 10, 290, 290), 180, 0, fill=(255, 0, 0)) >>> draw.chord((10, 10, 290, 290), -90, 0, fill=(255, 255, 0)) >>> img.show()
>>> img = Image.new("RGB", (300, 300), (255, 255, 255)) >>> draw = ImageDraw.Draw(img) >>> draw.pieslice((10, 10, 290, 290), -90, 0, fill="red") >>> img.show() 20.6. Библиотека Wand c:\python34\scripts\pip install Wand
>>> import wand
Листинг 20.6. Сравнение класса ImageDraw и модуля wand >>> # Рисуем эллипс средствами Pillow >>> 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="white", outline="red") >>> img.show() >>> input() >>> # Рисуем эллипс средствами ImageMagick и Wand >>> # Импортируем класс Image из модуля wand.image под именем >>> # WandImage, чтобы избежать конфликта имен с одноименным классом >>> # из модуля PIL >>> from wand.image import Image as WandImage >>> from wand.color import Color >>> from wand.drawing import Drawing >>> from wand.display import display >>> img = WandImage(width = 300, height = 300, background = Color("white")) >>> draw = Drawing() >>> draw.stroke_color = Color("red") >>> draw.fill_color = Color("white") >>> draw.ellipse((150, 150), (150, 150)) >>> draw.draw(img) >>> display(img)
>>> from wand.image import Image as WandImage >>> from wand.color import Color >>> img = WandImage(width = 400, height = 300, background = Color("black")) >>> img <wand.image.Image: e1038a4 '' (400x300)>
>>> from wand.color import Color >>> Color("white") # Белый цвет wand.color.Color('srgb(255,255,255)') >>> Color("#FF0000") # Красный цвет wand.color.Color('srgb(255,0,0)') >>> Color("rgb(0, 255, 0)") # Зеленый цвет wand.color.Color('srgb(0,255,0)') >>> Color("rgba(0, 255, 0, 0.5)") # Полупрозрачный зеленый цвет wand.color.Color('srgba(0,255,0,0.499992)')
>>> from wand.drawing import Drawing >>> draw = wand.drawing.Drawing() >>> draw <wand.drawing.Drawing object at 0x028C9570>
>>> draw.stroke_color = Color("black")
>>> draw.stroke_opacity = 0.5
>>> draw.stroke_width = 2
>>> draw.fill_color = Color("blue")
>>> draw.fill_opacity = 0.2
>>> from wand.image import Image as WandImage >>> from wand.drawing import Drawing >>> from wand.color import Color >>> from wand.display import display >>> img = WandImage(width = 400, height = 300, background = Color("white")) >>> draw = Drawing() >>> draw.stroke_color = Color("black") >>> draw.point(100, 200) >>> draw.draw(img) >>> display(img)
>>> draw.stroke_color = Color("blue") >>> draw.line((0, 0), (400, 300)) >>> draw.draw(img) >>> display(img)
>>> draw.stroke_color = Color("rgba(67, 82, 11, 0.7)") >>> draw.fill_color = draw.stroke_color >>> draw.rectangle(left = 100, top = 0, right = 150, bottom = 50) >>> draw.rectangle(left = 200, top = 0, width = 50, height = 50, radius = 5) >>> draw.rectangle(left = 300, top = 0, width = 50, height = 100, xradius = 5, yradius = 15) >>> draw.draw(img) >>> display(img)
>>> draw.stroke_color = Color("rgb(0, 127, 127)") >>> draw.fill_color = Color("rgb(127, 127, 0)") >>> draw.polygon([(50, 50), (350, 50), (350, 250), (50, 250)]) >>> draw.draw(img) >>> display(img)
>>> draw.stroke_color = Color("black") >>> draw.fill_color = Color("white") >>> # Рисуем окружность радиусом 100 пикселов >>> draw.circle((200, 150), (100, 150)) >>> draw.stroke_color = Color("white") >>> draw.fill_color = Color("black") >>> # Рисуем окружность радиусом 200 пикселов >>> draw.circle((200, 150), (0, 150)) >>> draw.draw(img) >>> display(img)
>>> draw.stroke_color = Color("black") >>> draw.fill_color = Color("white") >>> draw.ellipse((200, 150), (100, 150)) >>> draw.stroke_color = Color("white") >>> draw.fill_color = Color("black") >>> draw.ellipse((200, 150), (200, 50), rotation = (20, 110)) >>> draw.draw(img) >>> display(img)
>>> draw.stroke_color = Color("green") >>> draw.fill_color = Color("red") >>> draw.arc((10, 10), (290, 290), (20, 110)) >>> draw.draw(img) >>> display(img)
>>> draw.stroke_color = Color("red") >>> draw.fill_color = Color("green") >>> draw.bezier([(70, 167), (220, 109), (53, 390), (122, 14)]) >>> draw.draw(img) >>> display(img)
>>> draw.draw(img)
>>> from wand.display import display >>> display(img)
Листинг 20.7. Совместное использование библиотек Wand и Pillow from wand.image import Image as WandImage from wand.color import Color from wand.drawing import Drawing from PIL import Image, ImageDraw img = WandImage(width = 400, height = 300, background = Color("white")) draw = Drawing() draw.stroke_color = Color("red") draw.fill_color = Color("white") draw.circle((100, 100), (100, 0)) draw.draw(img) img.save(filename = "tmp.bmp") img = Image.open("tmp.bmp") draw = ImageDraw.Draw(img) draw.ellipse((200, 0, 400, 200), fill = "white", outline = "red") img.show() Вывод текста >>> 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()
>>> font = ImageFont.load("pilfonts/helvO12.pil") >>> draw.text((10, 40), "Hello", font=font, fill="blue") >>> img.show()
>>> txt = "Привет, мир!" >>> font_file = r"C:\WINDOWS\Fonts\arial.ttf" >>> font = ImageFont.truetype(font_file, size=24) >>> draw.text((10, 80), txt, font=font, fill=(0, 0, 0)) >>> img.show()
>>> txt = "Привет, мир!" >>> font_file = r"C:\WINDOWS\Fonts\arial.ttf" >>> font = ImageFont.truetype(font_file, size=24) >>> draw.textsize(txt, font=font) (143, 27) >>> font.getsize(txt) (143, 27)
from wand.drawing import Drawing, STYLE_TYPES draw = Drawing() draw.font = r"c:\Windows\Fonts\arial.ttf" draw.font_size = 24 draw.font_weight = 700 draw.font_style = STYLE_TYPES[2]
from wand.drawing import TEXT_ALIGN_TYPES, TEXT_DECORATION_TYPES draw.text_alignment = TEXT_ALIGN_TYPES[3] draw.text_decoration = TEXT_DECORATION_TYPES[2]
Листинг 20.8. Вывод текста на русском языке с помощью библиотеки Wand from wand.image import Image as WandImage from wand.color import Color from wand.drawing import Drawing, STYLE_TYPES, TEXT_ALIGN_TYPES, TEXT_DECORATION_TYPES from wand.display import display img = WandImage(width = 400, height = 300, background = Color("white")) draw = Drawing() draw.stroke_color = Color("blue") draw.fill_color = Color("yellow") draw.font = r"c:\Windows\Fonts\verdana.ttf" draw.font_size = 32 draw.font_weight = 700 draw.font_style = STYLE_TYPES[2] draw.text_alignment = TEXT_ALIGN_TYPES[2] draw.text_decoration = TEXT_DECORATION_TYPES[2] draw.text(200, 150, "Привет, мир!") draw.draw(img) display(img)
>>> fm = draw.get_font_metrics(img, "Привет, мир!") >>> print(fm.text_width, fm.text_height) 216.0 39.0 Создание скриншотов Листинг 20.9. Создание скриншотов >>> 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) Взаимодействие с Интернетом Разбор URL-адреса Листинг 21.1. Разбор URL-адреса с помощью функции urlparse() >>> from urllib.parse import urlparse >>> url = urlparse("http://wwwadmin.ru:80/test.php;st?var=5#metka") >>> url ParseResult(scheme='http', netloc='wwwadmin.ru:80', path='/test.php', params='st', query='var=5', fragment='metka') >>> tuple(url) # Преобразование в кортеж ('http', 'wwwadmin.ru:80', '/test.php', 'st', 'var=5', 'metka')
>>> urlparse("//wwwadmin.ru/test.php") ParseResult(scheme='', netloc='wwwadmin.ru', path='/test.php', params='', query='', fragment='') >>> urlparse("//wwwadmin.ru/test.php", "http") ParseResult(scheme='http', netloc='wwwadmin.ru', path='/test.php', params='', query='', fragment='')
>>> url.scheme, url[0] ('http', 'http')
>>> url.netloc, url[1] ('wwwadmin.ru:80', 'wwwadmin.ru:80')
>>> url.hostname, url.port ('wwwadmin.ru', 80)
>>> url.path, url[2] ('/test.php', '/test.php')
>>> url.params, url[3] ('st', 'st')
>>> url.query, url[4] ('var=5', 'var=5')
>>> url.fragment, url[5] ('metka', 'metka')
>>> u = urlparse("http://site.ru/add.php?v=5#metka") >>> u.query, u.fragment ('v=5', 'metka') >>> u = urlparse("http://site.ru/add.php?v=5#metka","",False) >>> u.query, u.fragment ('v=5#metka', '')
>>> ftp = urlparse("ftp://user:123456@mysite.ru") >>> ftp.scheme, ftp.hostname, ftp.username, ftp.password ('ftp', 'mysite.ru', 'user', '123456')
>>> url.geturl() 'http://wwwadmin.ru:80/test.php;st?var=5#metka'
Листинг 21.2. Использование функции urlunparse() >>> from urllib.parse import urlunparse >>> t = ('http', 'wwwadmin.ru:80', '/test.php', '', 'var=5', 'metka') >>> urlunparse(t) 'http://wwwadmin.ru:80/test.php?var=5#metka' >>> l = ['http', 'wwwadmin.ru:80', '/test.php', '', 'var=5', 'metka'] >>> urlunparse(l) 'http://wwwadmin.ru:80/test.php?var=5#metka'
Листинг 21.3. Разбор URL-адреса с помощью функции urlsplit() >>> from urllib.parse import urlsplit >>> url = urlsplit("http://wwwadmin.ru:80/test.php;st?var=5#metka") >>> url SplitResult(scheme='http', netloc='wwwadmin.ru:80', path='/test.php;st', query='var=5', fragment='metka') >>> url[0], url[1], url[2], url[3], url[4] ('http', 'wwwadmin.ru:80', '/test.php;st', 'var=5', 'metka') >>> url.scheme, url.netloc, url.hostname, url.port ('http', 'wwwadmin.ru:80', 'wwwadmin.ru', 80) >>> url.path, url.query, url.fragment ('/test.php;st', 'var=5', 'metka') >>> ftp = urlsplit("ftp://user:123456@mysite.ru") >>> ftp.scheme, ftp.hostname, ftp.username, ftp.password ('ftp', 'mysite.ru', 'user', '123456')
Листинг 21.4. Использование функции urlunsplit() >>> from urllib.parse import urlunsplit >>> t = ('http', 'wwwadmin.ru:80', '/test.php;st', 'var=5', 'metka') >>> urlunsplit(t) 'http://wwwadmin.ru:80/test.php;st?var=5#metka'
|
||||
Последнее изменение этой страницы: 2016-06-23; просмотров: 379; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.129.195.254 (0.006 с.) |