PIL 库的使用入门

PIL 库是python中很有用的处理图像的库,全名Python Imaging Library, 目前最新版本PIL 1.1.16。利用好它,可以很方便地对图像进行操作处理, 包括对原图处理,以及产生新的图片等。本文主要介绍总结PIL中常用类及其方法,详细介绍移步handbook,官方文档,Pillow Reference廖雪峰老师网站也有简单的PIL例子介绍。

1. Image类

1.1 读取图片

要从文件加载图像,可以使用open( )函数,需要给出图片的绝对路径:

from PIL import Image
im = Image.open('/home/zkj/note/blog/python3/FunPy/chrome.png') 

如果文件打开错误,返回 IOError 错误。
这样chrome.png图片的信息就存在了im对象,利用im属性可以查看:

In [5]: print(im.format, im.size, im.mode)
PNG (256, 256) P

size的单位是像素!im.size返回的是一个tuple对象,分别代表图片的宽和高。

1.2 创建新图

创建新的图,可以使用new()函数, 这个函数创建一幅给定模式(mode)和尺寸(size)的图片。如果省略 color 参数,则创建的图片被黑色填充满:

img_t = Image.new('RGBA', (256, 256))

1.3 操作图像

  • 对图像缩放:
In [11]: im = Image.open('/home/zkj/note/blog/python3/FunPy/chrome.png')
In [12]: w, h = im.size
In [13]: im.thumbnail((w//2, h//2)) #对图像缩放
In [14]: im.save('small_chrome.png', 'png') #保存图像

PIL 库的使用入门_第1张图片 PIL 库的使用入门_第2张图片

  • 图像剪切、粘贴、合并:
In [15]: im = Image.open('/home/zkj/note/blog/python3/FunPy/chrome.png')
In [16]: box = (100, 100, 200, 200)
In [17]: region = region.transpose(Image.ROTATE_180)
In [18]: im.paste(region, box)
In [19]: im.save('past_chrome.png', 'png')

矩形选区有一个4元元组定义,分别表示左、上、右、下的坐标,以左上角为坐标原点。

  • 几何变换:
out = im.resize((128,128)) # 指定图像的新大小
out = im.rotate(45) # 逆时针旋转45度

旋转90度的倍数也可以用transpose()函数:

out = im.transpose(Image.FLIP_LEFT_RIGHT)
out = im.transpose(Image.FLIP_TOP_BOTTOM)
out = im.transpose(Image.ROTATE_90)
out = im.transpose(Image.ROTATE_180)
out = im.transpose(Image.ROTATE_270)
  • 颜色模式变换:
im = Image.open('chrome.png').convert("L")

PIL 库的使用入门_第3张图片

PIL库支持从其他模式转为“L”或“RGB”模式,其他模式之间转换,则需要使用一个中间图像,通常是“RGB”图像。

1.4 读取图像像素

利用getpixel()函数,可以获得图片个像素点的RGBA信息:

im = Image.open('/home/zkj/note/blog/python3/FunPy/chrome.png')
target_pixels = [im.getpixel((x, y)) for x in range(0, im.size[0]) for y in range(0, im.size[1]) 

load()函数也可以返回RGB信息:

im = Image.open('/home/zkj/note/blog/python3/FunPy/chrome.png')
pix = im.load()
pix[100, 100] #返回像素点[100, 100]的颜色信息

2. ImageFilter, ImageEnhance 类

2.1 ImageFilter图片过滤

模糊效果:

from PIL import Image, ImageFilter
im = Image.open('/home/zkj/note/blog/python3/FunPy/fire.jpg')
im2 = im.filter(ImageFilter.BLUR)

PIL 库的使用入门_第4张图片PIL 库的使用入门_第5张图片

2.2 ImageEnhance图片增强

可以调整图像对比度、亮度、色彩平衡、锐度等

In [31]: from PIL import ImageEnhance
In [32]: im3 = ImageEnhance.Contrast(im) #调整对比度
In [33]: im3.enhance(1.3).show("30% more contrast")

PIL 库的使用入门_第6张图片PIL 库的使用入门_第7张图片

上面的例子显示了调整图像对比度。ImageEnhance.Color , ImageEnhance.Shapeness, ImageEnhance.Brightness分别对颜色,锐度,亮度作增强。

3. ImageDraw, ImageFont类

3.1 ImageDraw

创建新的图片,基本绘图操作有:

  • 弧/弦/扇形 chord arc pieslice (bbox, strtAng, endAng)

  • 椭圆 ellipse (bbox)

  • 线段/多段线 line (L) draw.line(((60,60),(90,60), (90,90), (60,90), (60,60))) #draw a square

  • 点 point (xy) #单像素点很小看不清,实际中可用实心小圆代替

  • 多边形 polygon (L) draw.polygon([(60,60), (90,60), (90,90), (60,90)]) #draw a square

  • 矩形 rectangle (bbox) # first coord属于矩形, second coord不属于

  • 文字 text(xy,message,font=None) 绘制文字message,文本区域左上角坐标为xy
    drawable.text((10, 10), “Hello”, fill=(255,0,0), font=None)

  • 文字大小 textsize(message,font=None) 给定文字message,返回所占像素(width,height)

3.2 ImageFont

矢量字体支持

import ImageFont
ttFont = ImageFont.truetype (“arial.ttf”, 16)
drawable.text ((10, 10), “Hello”, fill=(255,0,0), font=ttFont)

4. 应用实例(摘自廖雪峰网站)

from PIL import Image, ImageDraw, ImageFont, ImageFilter

import random

# 随机字母:
def rndChar():
    return chr(random.randint(65, 90))

# 随机颜色1:
def rndColor():
    return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))

# 随机颜色2:
def rndColor2():
    return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))

# 240 x 60:
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (255, 255, 255))
# 创建Font对象:
font = ImageFont.truetype('Arial.ttf', 36)
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 填充每个像素:
for x in range(width):
    for y in range(height):
        draw.point((x, y), fill=rndColor())
# 输出文字:
for t in range(4):
    draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())
# 模糊:
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg')

这里写图片描述

参考:

Python图像处理库:PIL中Image,ImageDraw等基本模块介绍
廖雪峰网站
Python图像处理库Pillow入门

你可能感兴趣的:(python)