Python的图像处理库Pillow

Python Imaging Library ( PIL ) 给 Python 增加了图像处理能力。

这个库提供了广泛的文件格式支持,高效的内部展现,以及十分强大的图像处理能力。

由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow。

Python3下安装Pillow

pip install Pillow

Image类的使用

Image是PIL最重要的类, 你可以通过多种方法创建这个类的实例。可以从文件中加载图像,并对图像进行各种处理操作。

使用Image模块

from PIL import Image

从文件中加载Image对象

im = Image.open("test.jpg”)

print(im.format, im.size, im.mode)

Image的常见属性

format:图像来源。如果图像不是从文件读取它的值就是None

size:图像尺寸,一个二元tuple,包含width和height(宽度和高度,单位都是px)

mode:颜色模式, “L” (luminance) 表示灰度图像, “RGB” 表示真彩色图像,  “CMYK” 表示出版图像。

图像保存

im.save(outfile, "JPEG")

图像缩略图

im.thumbnail(size)

使用Image.ANTIALIAS可以消除锯齿

im.thumbnail(size, Image.ANTIALIAS)

 PIL库不会直接解码或者加载图像栅格数据。当你打开一个文件,只会读取文件头信息用来确定格式,颜色模式,大小等等,文件的剩余部分不会主动处理。这意味着打开一个图像文件的操作十分快速,跟图片大小和压缩方式无关。

图像的裁剪合并

从图像中复制出一个矩形选区

box = (100, 100, 400, 400)

region = im.crop(box)

矩形选区有一个4元元组定义,分别表示左、上、右、下的坐标。这个库以左上角为坐标原点,单位是px,所以上诉代码复制了一个 300x300 pixels 的矩形选区。这个选区现在可以被处理并且粘贴到原图。

处理复制的矩形选区并粘贴到原图

region = region.transpose(Image.ROTATE_180)

im.paste(region, box)

当你粘贴矩形选区的时候必须保证尺寸一致。此外,矩形选区不能在图像外。然而你不必保证矩形选区和原图的颜色模式一致,因为矩形选区会被自动转换颜色。

分离和合并颜色通道

r, g, b = im.split()

im = Image.merge("RGB", (b, g, r))

图像缩放

out = im.resize((128, 128))

如果要消除锯齿,可以使用Image.ANTIALIAS过滤器

out = im.resize((128, 128), Image.ANTIALIAS)

图像旋转

out = im.rotate(45)

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.convert("L")

图像滤镜

from PIL import Image, ImageFilter

#模糊滤镜

im2 = im.filter(ImageFilter.BLUR)

#轮廓滤镜

im2 = im.filter(ImageFilter.CONTOUR)

#细节增强滤镜

im2 = im.filter(ImageFilter.DETAIL)

#边缘增强滤镜

im2 = im.filter(ImageFilter.EDGE_ENHANCE)

#深度边缘增强滤镜

im2 = im.filter(ImageFilter.EDGE_ENHANCE_MORE)

#浮雕滤镜

im2 = im.filter(ImageFilter.EMBOSS)

#边缘信息滤镜

im2 = im.filter(ImageFilter.FIND_EDGES)

#平滑滤波滤镜

im2 = im.filter(ImageFilter.SMOOTH)

#深度平滑滤波滤镜

im2 = im.filter(ImageFilter.SMOOTH_MORE)

#锐化滤波滤镜

im2 = im.filter(ImageFilter.SHARPEN)

文字转换为图片

from PIL import ImageFont
from PIL import Image
from PIL import ImageDraw

#设置字体,如果没有,也可以不设置
font = ImageFont.truetype(word_ttf,word_size)
w,h = font.getsize("测")
image = Image.new("RGB",[width, height],"white")
draw = ImageDraw.Draw(image)
#一个一个写入文字
for k, text in enumerate(strlist):
    for m, ch in enumerate(text):
        draw.text((w*m, h*k), ch, (0,0,0), font=font) #设置位置坐标 文字 颜色 字体

#定义文件名
image.save("./output.jpg")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值