PIL库的学习
PIL库概述
PIL库可以完成图像归档和图像处理两方面功能需求:
图像归档:对图像进行批处理、生成图像预览、图像格式转换等;
图像处理:图像基本处理、像素处理、颜色处理等。
基本方法:①Image.open(filename):根据参数加载图像文件。可填入图像的具体的储存位置。
②<图像变量>.save('储存地址'):储存处理后的图像。
1、Image类。【任何一个图像文件都可以用Image对象表示Image类的图像读取和创建方法】
from PIL import Image
这里只简要解析几个方法。
<1>Image.thumbnail(size):创建图像的缩略图,size是缩略图尺寸的二元元组。
实例:
1 pA = Image.open("D:\\桌面\\pytest\\景色1.jpg") #打开 2 pA.thumbnail((128,128)) #缩略 3 pA.save("D:\\桌面\\pytest\\景色1_TN.jpg") #保存
原图(1)
缩略图
<2>Image.point(func):根据函数func功能对每个元素进行运算,返回图像副本。
<3>Image.split():提取RGB图像的每个颜色通道,返回图像副本。
<4>Image.merge(mode,bands):合并通道 ,采用mode色彩,bands是新色的色彩通道。
实例:
1 pB = Image.open("D:\\桌面\\pytest\\景色2.jpeg") #打开 2 #改变颜色 3 r,g,b = pB.split() #获得RGB通道数据 4 newr = r.point(lambda i:i*1.5) # 将R通道颜色值变为原来的1.5倍 5 newb = b.point(lambda i:i*0.8) # 将b通道颜色值变为原来的0.8倍 6 newpB_merge = Image.merge(pB.mode, (newr, g, newb)) # 将3个通道合形成新图像 7 newpB_merge.save("D:\\桌面\\pytest\\景色2_Merge.jpeg")
原图 (2)
改变颜色后
2、ImageFilter类和ImageEnhance类。【PIL库的ImageFilter类和ImageEnhance类提供了过滤图像和增强图像的方法】ps:此处只列举ImageFilter的几个方法。
from PIL import ImageFilter
————可利用Image类的filter()方法使用ImageFilter类,如:Image.filter(ImageFilter.fuction)
<1>ImageFilter.CONTOUR:图像的轮廓效果。
实例:(此处使用原图(2))
1 from PIL import Image 2 from PIL import ImageFilter 3 4 pB = Image.open("D:\\桌面\\pytest\\景色2.jpeg") #打开 5 6 #轮廓 7 newpB_contour = pB.filter(ImageFilter.CONTOUR) 8 newpB_contour.save("D:\\桌面\\pytest\\景色2_Contour.jpg")
轮廓图
<2>ImageFilter.EMBOSS:图像的浮雕效果。
实例:(此处使用原图(1))
1 from PIL import Image 2 from PIL import ImageFilter 3 pA = Image.open("D:\\桌面\\pytest\\景色1.jpeg") #打开 4 5 #浮雕 6 newpA_emboss = pA.filter(ImageFilter.EMBOSS) 7 newpA_emboss.save("D:\\桌面\\pytest\\景色1_Emboss.jpg")
浮雕图
————————————————————--------------------------------------------------——————————————————————-
图像字符化绘制
1 from PIL import Image 2 ascii_char = list('"$%_&WM#*oahkbdpqwmZO0QLCJUYXzcvunxr\ 3 jft/\|()1{}[]?-/+@<>i!;:,\^`.') 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) #灰色rbg 8 unit = 256 / len(ascii_char) 9 return ascii_char[int(gray//unit)] 10 def main(): 11 im = Image.open('D:\\桌面\\pytest\\picture7.png') 12 WIDTH, HEIGHT = 500,300 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))) #getpixel函数是用来获取图像中某一点的像素的RGB颜色值,getpixel的参数是一个坐标点。对于图象的不同的模式,getpixel函数返回的值有所不同。 18 txt += '\n' 19 fo = open("D:\\桌面\\pytest\\pic_char.txt","w") 20 fo.write(txt) 21 fo.close() 22 main()
1 from PIL import Image 2 im = Image.open('D:\\桌面\\pytest\\bekilled.gif') # 读入一个GIF文件 3 try: 4 im.save('D:\\桌面\\pytest\\picframe{:02d}.png'.format(im.tell())) 5 while True: 6 im.seek(im.tell()+1) #文件seek()的运用。改变当前文件操作指针的位置,offset的值:0:文件开头; 1: 当前位置; 2: 文件结尾 7 im.save('D:\\桌面\\pytest\\picframe{:02d}.png'.format(im.tell())) 8 except: 9 print("处理结束")
(gif文件来源百度)
自制生成GIF
小编将上面处理过的一些图像生成GIF,为此将图像统一存放在一个文件夹里(并重命名),且都转化为png格式。
1 from PIL import Image 2 imgs = [] 3 for i in range(1,12): 4 pic_name = 'D:\\桌面\\素材\\picture{}.png'.format(i) 5 picture = Image.open(pic_name) 6 temp = picture.resize((400,250)) 7 imgs.append(temp) 8 9 imgs[0].save('D:\\桌面\\素材\\合成.gif',save_all=True, append_images=imgs, duration=0.5)
【后记:若您在阅读过程中发现问题,请您斧正,小编将不胜感激。】