Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Получение информации об изображении

Поиск

Листинг 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 Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.134.196 (0.009 с.)