pillow图像处理库
PIL(Python Imaging Library)是Python常用的图像处理库,但PIL仅支持到Python2.7,后一群志愿者在PIL的基础上创建了PIL的兼容版本Pillow
Pillow提供了广泛的文件格式支持,强大的图像处理能力,主要包括图像存储、图像显示、格式转换以及基本的图像处理操作等
Pillow扩展库主要功能
图像归档
对图像进行批处理、生成图像预览、图像格式转换等
图像处理
图像基本处理、像素处理、颜色处理
Pillow扩展库主要操作
在PIl中,任何一个图像文件都可以用Image对象表示
Image类的图像读取和创建方法
方法 | 描述 |
Image.open(filename) | 根据参数加载图像文件 |
Image.new(mode,size,color) | 根据给定参数创建一个新的图像 |
Image.open(StringIO,StringIO(buffer)) | 从字符串中获取图像 |
Image.frombytes(mode,size,data) | 根据像素点data创建图像 |
Image.verify | 对图像文件完整性进行检查,返回异常 |
Image类有4个处理图片的常用属性
属性 | 描述 |
Image.format | 表示图像格式或来源,如果图像不是从文件读取,值是none |
Image.mode | 图像的色彩模式,“L”灰度图像,“RGB”真彩色图像,“CMYK”出版图像 |
Image.size | 图像宽度和高度,单位是像素点(px),返回值是二元元祖(tuple) |
Image.palette | 调色板属性,返回一个ImagePalette类型 |
Image类的图像转换和保存方法
方法 | 描述 |
Image.save(filename,format) | 将图像保存为filename文件名,format是图片格式 |
Image.convert(mode) | 使用不同的参数,转换为图像为新的模式 |
Image.thumbnail(size) | 常见图像的缩略图,size是缩略图尺寸的二元元祖 |
生成缩略图,128*128是尺寸
from PIL import Image
im=Image.open("头像(1).jpg")
im.thumbnail((128,128))
im.save("img1","JPEG")
Image类能够对每个像素点或者一幅RGB图像的每个通道单独进行操作,split()方法能够将RGB图像个颜色通道提取出来,merge()方法能够将各独立通道再合成一幅新的图像。
方法 | 描述 |
Image.point(func) | 根据函数func功能对每个元素进行运算,返回图像副本 |
Image.split() | 提取rgb图像的每个颜色通道,返回图像副本 |
Image.merge(mode,bands) | 合并通道,采用mode色彩,bands是新色的色彩通道 |
Image.blend(im1,im2,alpha) | 将两幅图片im1和im2按照如下公式插值后生成洗呢图像:im1*(1.0-alpha)+im2*alpha |
颜色变换
from PIL import Image
im=Image.open("1.jpg")
r,g,b=im.split()
om=Image.merge("RGB",(b,g,r))#对RGB的颜色进行了调换
om.save('2.jpg')
PIL库的ImageFilter提供的过滤图像方法
方法表示 | 描述 |
ImageFilter.BLUR | 图像的模糊效果 |
ImageFilter.CONTOUR | 图像的轮廓效果 |
ImageFilter.DETALL | 图像的细节效果 |
ImageFilter.EDGE_ENHANCE | 图像的边界加强效果 |
ImageFilter.EDGE_ENHANCE_MODE | 图像的阈值边界加强效果 |
ImageFilter.EMBOSS | 图像的浮雕效果 |
ImageFilter.FIND_EDGES | 图像的边界效果 |
ImageFilter.SMOOTH | 图像的平滑效果 |
ImageFilter.SMOOTH_MORE | 图像的阈值平滑效果 |
ImageFilter.SHARPEN | 图像的锐化效果 |
生成图像模糊效果:套用滤镜
from PIL import Image
from PIL import ImageFilter
im=Image.open("1.jpg")
om=im.filter(ImageFilter.BLUR)
#为图片使用模糊滤镜
om.save("3.jpg")
PIL库的ImageEnhance类提供了更高级的图像增强效果,提供调整色彩度、亮度、对比度、锐化等功能。
方法 | 描述 |
ImageEnhance.enhance(factor) | 对选择属性的数值增强factor值 |
ImageEnhance.Color(im) | 调整图像的颜色平衡 |
ImageEnhance.Contrast(im) | 调整图像的对比度 |
ImageEnhance.Brightness(im) | 调整图像的亮度 |
ImageEnhance.Sharpness(im) | 调整图像的锐度 |
高级图像增强实例
from PIL import Image
from PIL import ImageEnhance
im=Image.open("1.jpg")
#调整图像对比库
om=ImageEnhance.Contrast(im)
#图像对比度增强3倍
om.enhance(3).save("4.jpg")
随机生成验证码
from PIL import Image,ImageDraw,ImageFont,ImageFilter
import random
# 随机字母:(65-90表示26个大写英文字母)
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())#fill随机颜色
# 输出文字:
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')