pil库的依赖库_PIL库的学习

本文介绍了PIL库的功能,包括图像归档和处理。重点讲述了Image类的基本方法,如Image.open()和Image.save(),以及如何创建缩略图、改变颜色。还提到了ImageFilter和ImageEnhance类,用于图像过滤和增强,例如轮廓和浮雕效果。最后,文章展示了如何进行图像字符化绘制、提取GIF各帧以及自制GIF。
摘要由CSDN通过智能技术生成

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") #保存

20200414091628991595.png   原图(1)

20200414091629212307.jpg   缩略图

<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")

20200414091629276762.png   原图 (2)

20200414091629874442.png   改变颜色后

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 importImage2 from PIL importImageFilter3

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")

20200414091630147890.png  轮廓图

<2>ImageFilter.EMBOSS:图像的浮雕效果。

实例:(此处使用原图(1))

1 from PIL importImage2 from PIL importImageFilter3 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")

20200414091630427197.png     浮雕图

————————————————————--------------------------------------------------——————————————————————-

图像字符化绘制

1 from PIL importImage2 ascii_char = list(‘"$%_&WM#*oahkbdpqwmZO0QLCJUYXzcvunxr3 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 defmain():11 im = Image.open(‘D:\\桌面\\pytest\\picture7.png‘)12 WIDTH, HEIGHT = 500,300

13 im =im.resize((WIDTH, HEIGHT))14 txt = ""

15 for i inrange(HEIGHT):16 for j inrange(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()

20200414091630497512.png

20200414091630614704.png  

20200414091630924287.png    

20200414091631035619.png

提取GIF各帧图像

1 from PIL importImage2 im = Image.open(‘D:\\桌面\\pytest\\bekilled.gif‘) #读入一个GIF文件

3 try:4 im.save(‘D:\\桌面\\pytest\\picframe{:02d}.png‘.format(im.tell()))5 whileTrue: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("处理结束")

20200414091631123513.gif(gif文件来源百度)

20200414091631213360.png

20200414091631316880.png 

20200414091631417470.png 

20200414091631485832.png

20200414091631547357.png 

20200414091631632322.png

自制生成GIF

小编将上面处理过的一些图像生成GIF,为此将图像统一存放在一个文件夹里(并重命名),且都转化为png格式。

1 from PIL importImage2 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.1)

20200414091631721192.gif

【后记:若您在阅读过程中发现问题,请您斧正,小编将不胜感激。】

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值