![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 386; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.8.183 (0.011 с.) |