好玩图像PIL处理
2019-04-11 Python 3.7.1
1.安装pillow库:
在cmd下,输入简单的命令: pip install pillow 即可安装pillow库。
2.PIL库的简介:
1. PIL库主要有2个方面的功能:
(1) 图像归档:对图像进行批处理、生产图像预览、图像格式转换等。
(2) 图像处理:图像基本处理、像素处理、颜色处理等。
2. PIL拥有多个类,此处就其中的Image类、ImageFilter类、ImageEnhance类做简单介绍。
3.使用库函数Image类 —— 基本图像处理
1). 调用Image类
调用方法:from PIL import Image
2). Image类关于图像读取与创建
Image.open(filename) 加载图像文件
Image.new(mode,size,color) 根据给定参数创建新图像
Image.open(StringIO.StringIO(buffer)) 从字符串中获取图像
Image.frombytes(mode,size,color) 根据像素点创建新图像
Image.verify() 对图像完整性进行检查,返回异常
3). Image类的常用属性
方法 说明
Image.format 图像格式或来源,若图像不是从文件读取,返回None
Image.mode 图像的色彩模式,’L’为灰度模式,’RGB’为真彩色图像,’C(青)M(品红)Y(黄)K(黑)’为出版图像
Image.size 图像的宽度和高度,单位是像素(px),返回值为元组类型
Image.palette 调色板属性,返回ImagePalette类型
4.Image类的序列图像操作方法
方法 说明
Image.seek(frame) 跳转并返回图像中的指定帧
Image.tell() 返回当前帧的序号
5.Image类的图像旋转和缩放方法
方法 说明
Image.resize(size) 返回按size大小调整图像的副本
Image.rotate(angle) 返回按angle角度旋转图像的副本
6.Image类的图像转换和保存方法
方法 说明
Image.save(filename,format) 将图像保存为filename文件名,format格式
Image.convert(mode) 将图像转换为mode模式
Image.thumbnail(size) 创建图像的缩略图,size是缩略图尺寸的元组
代码如下:
1 # -*- encoding:utf-8 -*-
2 ''' 改变颜色 --- 颜色反转'''
3 from PIL import Image
4 nest = Image.open("D:\\360安全浏览器下载\人类第一张黑洞图.jpg")
5 r,g,b = nest.split() #获取原图的RGB通道的颜色值
6 newb = b.point(lambda i:i*1.1) #将B通道的颜色值增强
7 nest1 = Image.merge(nest.mode,(b,g,r))
8 nest1.thumbnail((400,254)) #创建缩略图
9 nest1.save("D:\\360安全浏览器下载\人类第一张黑洞图2.jpg")
效果如下显示:
原图:
效果图:
7.Image类的图像像素和通道处理方法
方法 说明
Image.point(func) 根据函数func的功能对每个元素进行运算,返回图像副本
Image.split() 根据GRB图像的每个颜色通道,返回图像副本
Image.merge(mode,bands) 合成通道,其中mode为色彩,bands为新的色彩通道
Image.blend(im1,im2,alpha) 将2张图片im1和im2按照公式插值后生成新图像公式:im1*(1.0 - alpha) + im2*alpha
四、使用库函数ImageFilter类 —— 图像过滤
调用ImageFilter类:
from PIL import ImageFilter 2. ImageFilter类预定义图像过滤方法
方法 说明
ImageFilter.BLUR 图像的模糊效果
ImageFilter.CONTOUR 图像的轮廓效果
ImageFilter.DETAIL 图像的细节效果
ImageFilter.EDGE_ENHANCE 图像的边界加强效果
ImageFilter.EDGE_ENHANCE_MORE 图像的阈值边界加强效果
ImageFilter.EMBOSS 图像的浮雕效果
ImageFilter.FIND_EDGES 图像的边界效果
ImageFilter.SMOOTH 图像的平滑效果
ImageFilter.SMOOTH_MORE 图像的阈值平滑效果
ImageFilter.SHARPEN 图像的锐化效果
用例子说明:代码如下:
1 # -*- encoding:utf-8 -*-
2 ''' 轮廓效果 --- 素描 '''
3 from PIL import Image
4 from PIL import ImageFilter
5 square = Image.open("D:\\360安全浏览器下载\宝宝不开心.jpg")
6 square1 = square.filter(ImageFilter.CONTOUR) #选择轮廓效果
7 square1.save("D:\\360安全浏览器下载\宝宝不开心2.jpg")
原图片:
效果图片:
五、使用库函数ImageEnhance类 —— 图像增强
ImageEnhance类图像增强与滤镜方法
方法 说明
ImageEnhance.enhance(factor) 对所选属性的数值增强factor倍
ImageEnhance.Color(im) 调整图像的颜色平衡
ImageEnhance.Contrast(im) 调整图像的对比度
ImageEnhance.Brightness(im) 调整图像的亮度
ImageEnhance.Sharpness(im) 调整图像的锐度
代码如下:
1 # -*- encoding:utf-8 -*-
2 ''' 亮度增强 --- 曝光 '''
3 from PIL import Image
4 from PIL import ImageEnhance
5 gz = Image.open("D:\\360安全浏览器下载\人类第一张黑洞图.jpg")
6 gz1 = ImageEnhance.Brightness(gz) #选择亮度
7 gz1.enhance(2).save("D:\\360安全浏览器下载\人类第一张黑洞图3.jpg") #将亮度增强2倍后保存
原图:
效果如下:
六、制作gif图片
1 # -*- encoding:utf-8 -*-
2 ''' 制作GIF图 '''
3 import imageio
4 savename = "D:\\my.gif"
5 #准备制作的图像名称
6 filenames = ["D:\\72.png","D:\\33.png","D:\\55.png","D:\\菜3.png","D:\\蔡徐坤2.png","D:\\表情.jpg","D:\\小狗.jpg"]
7 frames = []
8 for name in filenames:
9 frames.append(imageio.imread(name))
10 imageio.mimsave(savename,frames,'GIF',duration=1)
gif图如下:
七、程序字符画绘制:
1 #e12.1DrawCharImage
2 from PIL import Image
3 ascii_char = list(' %')#为了使字符画明显,这里仅使用‘ ’和‘%’
4 def get_char(r, b, g, alpha=256):
5 if alpha == 0:
6 return ' '
7 gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
8 unit = 256 / len(ascii_char)
9 return ascii_char[int(gray//unit)]
10 def main():
11 im = Image.open('D:\\360安全浏览器下载\小猪佩奇2.jpg')
12 WIDTH, HEIGHT = 100, 60
13 im = im.resize((WIDTH, HEIGHT))
14 txt = ""
15 for i in range(HEIGHT):
16 for j in range(WIDTH):
17 txt += get_char(*im.getpixel((j, i)))
18 txt += '\n'
19 fo = open("D:\\360安全浏览器下载\小猪佩奇.txt","w")
20 fo.write(txt)
21 fo.close()
22 main()
原图:
字符画:

浙公网安备 33010602011771号