PIL库支持图像存储、显示和处理,它能够处理几乎所有图片格式,可以完成对图像的缩放、剪裁、叠加以及向图像添加线条、图像和文字等操作。
1、功能:
(1)图像归档:对图像进行批处理、生成图像预览、图像格式转换等;
(2)图像处理:图像基本处理、像素处理、颜色处理等。
2、分类:
Ⅰ、Image类:from PIL import Image
(1)图像读取和创建方法
| 方法 | 描述 | 
| Image.open(filename) | 根据参数加载图像文件 | 
| Image.new(mode, size, color) | 根据给定参数创建一个新的图像 | 
| Image.open(StringIO.StringIO(buffer)) | 从字符串中获取图像 | 
例:
from PIL import Image
im = Image.open("D:\\我爱学习\\python3\\photos\\image1.jpg")
(2)处理图片常用属性:
| 方法 | 描述 | 
| Image.format | 标识图像格式或来源,如果图像不是从文件读取,值是None | 
| Image.mode | 图像的色彩模式,"L"灰度图像、"RGB"真彩色图像、"CMYK"出版图像 | 
| Image.size | 图像宽度和高度,单位是像素(px),返回值是二元元组(tuple) | 
| Image.palette | 调色板属性,返回一个ImagePalette类型 | 
(3)图像转换和保存方法:
| 方法 | 描述 | 
| Image.save(filename,format) | 将图像保存为filename文件名,format是文件格式 | 
| Image.convert(mode) | 使用不同的参数,转换图像为新的模式 | 
| Image.thumbnail(size) | 创建图像的缩略图,size是缩略尺寸的二元元组 | 
例:
from PIL import Image
im = Image.open("D:\\我爱学习\\python3\\photos\\image1.jpg")
im.thumbnail((128,128))
im.save("D:\\我爱学习\\python3\\photos\\imagechange1.jpg")
效果对比图如下:

(4)像素点和RGB:
| 方法 | 描述 | 
| 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("D:\\我爱学习\\python3\\photos\\image1.jpg")
r,g,b = im.split()
om = Image.merge("RGB",(b,g,r))
om.save("D:\\我爱学习\\python3\\photos\\imagechange2.jpg")
效果对比如下:

Ⅱ、ImageFilter类:from PIL import ImageFilter
| 方法 | 描述 | 
| ImageFilter.BLUR | 图像的模糊效果 | 
| ImageFilter.CONTOUR | 图像的轮廓效果 | 
| ImageFilter.DETAIL | 图像的细节效果 | 
| ImageFilter.EMBOSS | 图像的浮雕效果 | 
| ImageFilter.SMOOTH | 图像的平滑效果 | 
| ImageFilter.SHARPEN | 图像的锐化效果 | 
Ⅲ、ImageEnhance类:from PIL import ImageEnhance
| 方法 | 描述 | 
| ImageEnhance.enhance(factor) | 对选择属性的数值增强factor倍 | 
| ImageEnhance.Color(im) | 调整图像的颜色平衡 | 
| ImageEnhance.Contrast(im) | 调整图像的对比度 | 
| ImageEnhance.Brightness(im) | 调整图像的亮度 | 
| ImageEnhance.Sharpness(im) | 调整图像的锐度 | 
Ⅳ、图像字符画绘制:位图图片是由不同颜色像素点组成的规则分布,如果采用字符串代替像素,图像就成为了字符画。
1、以下图为例,进行缩略,变色,提取轮廓和浮雕:
 (原图 image6.jpg)
(原图 image6.jpg)
from PIL import Image
from PIL import ImageFilter
im = Image.open("D:\\我爱学习\\python3\\photos\\image6.jpg")
r,g,b = im.split()     #变色
newr = b.point(lambda i: i * 0.7)
bm = Image.merge("RGB",(b,g,r))
bm.save("D:\\我爱学习\\python3\\photos\\imageaa2.jpg")
cm = im.filter(ImageFilter.CONTOUR)    #轮廓
cm.save("D:\\我爱学习\\python3\\photos\\imageaa3.jpg")
dm = im.filter(ImageFilter.EMBOSS)    #浮雕
dm.save("D:\\我爱学习\\python3\\photos\\imageaa4.jpg")
im.thumbnail((120,120))    #缩略
im.save("D:\\我爱学习\\python3\\photos\\imageaa1.jpg")
效果比较如下:

(顺序依次为:原图,缩略,变色,轮廓,浮雕)
2、以下图为例,进行gif图提取:
注:
(1)f.seek()函数:用于移动文件读取指针到文件指定的位置
(2)f.tell ()函数:返回当前文件指针在文件中的位置

(原gif tianxianbabe.gif)
from PIL import Image
im = Image.open(‘D:\\我爱学习\\python3\\photos\\tianxianbabe.gif‘)
try:
    im.save(‘picframe{:02d}.png‘.format(im.tell()))
    while True:
        im.seek(im.tell()+1)
        im.save(‘picframe{:02d}.png‘.format(im.tell()))
except:
    print("处理结束")
得到图片62张。以下为随机抽取出来的图片。





3、以下图为例,进行图片锐度,磨皮和美白:
 
(原图 Image.jpg )
拓展:
import cv2 源自 opencv库,可用镜像网站下载安装包,再到cmd窗口下载:https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/opencv-python
我下载的是:opencv_python-3.4.9.33-cp36-cp36m-win_amd64.whl 下载路径是 D:\
安装时执行命令为:pip install “绝对路径”+whl文件名 e.g, pip install D:\opencv_python-3.4.9.33-cp36-cp36m-win_amd64.whl
| 函数 | 描述 | 
| cv2.imread(filepath,flags) | 读入图像,filepath:要读入图片的完整路径,flags:读入图片的标志 | 
| cv2.imshow(wname,img) | 显示图像,wname:显示图像的窗口的名字,img:要显示的图像(即读入的图像) | 
| cv2.waitKey() | 等待键盘输入,参数为0时,表示无限等待 | 
| cv2.imwrite(file,img,num) | 保存图像,file:要保存的文件名,img:要保存的图像,num:可选,针对特定格式 | 
| cv2.flip(img,flipcode) | 翻转图像,flipcode = 0:沿x轴翻转, > 0:沿y轴翻转,< 0:x,y轴同时翻转 | 
| img.copy() | 复制图像 | 
| cv2.destroyAllWindow() | 销毁所有窗口 | 
np.uint8()表示无符号整数(从0 到255)
numpy.clip(a, a_min, a_max, out=None)中a是一维数组,a_min表示a中最小值, a_max表示a中最大值。
from PIL import Image
from PIL import ImageEnhance
import cv2
import numpy as np
def Sharpen(sharpness):
    im = Image.open(filename)
    om = ImageEnhance.Sharpness(im)
    im_sharpen = om.enhance(sharpness)
    im_sharpen.save(‘D:\\我爱学习\\python3\\photos\\sharpen.jpg‘)
def Whiten(image,whi):
    import cv2
    image = cv2.imread(filename)
    white = np.uint8(np.clip((whi * image) + 10, 0, 255))
    cv2.imshow(‘Her‘,white)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    cv2.imwrite(‘Hermione‘,‘Her‘)
if __name__ =="__main__":
    filename = ‘D:\\我爱学习\\python3\\photos\\Image.jpg‘
    sharpness=30
    Sharpen(sharpness)
    whi = 1.2
    image = cv2.imread(‘D:\\我爱学习\\python3\\photos\\Image.jpg‘)
    Whiten(image,whi)
效果如下:

(从左至右依次为:原图,锐化,美白)
4、生成gif:
import PIL.Image as Image
def get_gif(pics_dir,n,t=300):
    imgs = []
    for i in range(n):
        pic_name = ‘{}/{}.jpg‘.format(pics_dir,i)
        temp = Image.open(pic_name)
        imgs.append(temp)
    save_name = ‘{}.gif‘.format(pics_dir)
    imgs[0].save(save_name, save_all=True, append_images=imgs, duration=t)
    return save_name
if __name__ == ‘__main__‘:
    pics_dir = ‘D:\\我爱学习\\python3\\photos\\crazy2‘
    save_name = get_gif(pics_dir,32,300)
    print(‘制作完成。所属文件:{}‘.format(save_name))
效果如下:

原文:https://www.cnblogs.com/deng11/p/12657278.html