深入剖析Python最强大图片处理模块---Pillow

Irene181
• 阅读 2153

前言

Pillow作为一个图片模块。可谓是真的简便强大,它的前身是PIL,后来将他取代,现在的pillow 可谓是一家独大,好了,让我们来看看他的具体用法。

今天我们介绍pillow 常用六大模块:

1.Image

2.ImageDraw

3.ImageEnhance

    4.ImageFont

    5.ImageGrab

6.ImageFilter

一、Image

from PIL import Image
from io import BytesIO
#读取一张图片
im=Image.open('2.jpg') #根据文件名读取图像
b=BytesIO()
im.save(b,'JPEG')
data=b.getvalue()
print(data)#获取图片的二进制信息
#图片格式
print('格式:',im.format)
#图片模式
print('模式:',im.mode)  #L:灰度  RGB:真彩色 CMYK:出版图像
#图像宽高
print('宽高:',im.size)
print('完整信息:',im.info)
try:
    im.verify()#检查图像文件的完整性
except:
    pass
finally:
    im.show() #显示一张图片
    im.save('4.jpg','JPEG') #保存图片

深入剖析Python最强大图片处理模块---Pillow


from PIL import Image
from io import BytesIO
import requests
#创建新图片:
im1=Image.new('RGBA',(400,400),'red')
#从二进制中读取图片
res=requests.get('http://pic.sc.chinaz.com/files/pic/pic9/202003/zzpic24077.jpg').content
im2=Image.frombytes('RGB',(100,100),data=res)#只能解析纯二进制图片
#从网页中读取图片
im2=Image.open(BytesIO(res))
b=BytesIO()
im2.save(b,format="PNG")
im2.show()

#两张图片相加:
im1=Image.new('RGBA',(400,400),'red')
im2=Image.new('RGBA',(400,400),'blue')
Image.blend(im1,im2,0.5) #两个图片大小一定要一样(效果见图4)

#点操作:
im1.point(lambda x:x*1.2)


#图片裁剪:
box=(100,100,200,200)
region=im.crop(box)#设置要裁剪的区域

#图片粘贴(合并)
im1.paste(region,box)#粘贴box大小的region到原先的图片对象中。(见图5)


im1=Image.new('RGB',(400,400),'red')
im2=Image.new('RGBA',(400,400),'blue')

#通道分离:
r,g,b=im1.split()#分割成三个通道,此时r,g,b分别为三个图像对象。
print(r,g,b)
#通道合并:
im3=Image.merge("RGB",(b,g,r))#将b,r两个通道进行翻转。


#改变图片的大小:
im4=im1.resize((300,200))
im4.show()


#图片翻转
im5=im1.transpose(Image.FLIP_LEFT_RIGHT)  #左右翻转
im6=im2.transpose(Image.FLIP_TOP_BOTTOM)  #上下翻转
im5.show()
im6.show()


#获取某个像素位置的值
im1.getpixel((43,23))


#写某个像素位置的值
im1.putpixel((10,20),(255,32,43))


#创建图像缩略图
im1.thumbnail((10,20))#图片大小为(10,20)
im1.show()

#旋转图像
im8=im1.rotate(45) #逆时针旋转45度
im8.show()
注:RGB有三个通道,RGBA有四个通道,以上图片显示效果都在图6中


#图片模式转换
im3.convert('RGBA')
modes       Description
 1      1位像素,黑白图像,存成8位像素
 L      8位像素,黑白
 P      9位像素,使用调色板映射到任何其他模式
RGB     3*8位像素,真彩
RGBA4*8位像素,真彩+透明通道
CMYK4*8位像素,印刷四色模式或彩色印刷模式
YCbCr3*8位像素,色彩视频格式
 I      32位整型像素
 F      33位浮点型像素

深入剖析Python最强大图片处理模块---Pillow

深入剖析Python最强大图片处理模块---Pillow

深入剖析Python最强大图片处理模块---Pillow

二、ImageDraw

这个模块主要就是画图和打水印时用的,具体方法请看下面:


from PIL import Image,ImageDraw
#画点
im=Image.open('2.jpg')
draw= ImageDraw.Draw(im)
draw.point([100,200],fill='blue')#指定点的坐标和颜色


# 创建一个正方形。[x1,x2,y1,y2]或者[(x1,x2),(y1,y2)]  fill代表的为颜色
draw.line([100,100,100,600],fill='pink')#直线
draw.line([100,100,600,100],fill='green')
draw.line([600,100,600,600],'black')
draw.line([100,600,600,600],'blue')



# 弧形 [x1,x2,y1,y2]  弧度 颜色
draw.arc([100,100,600,600],0,360,fill='black')
draw.arc([200,100,500,600],0,360,fill='yellow')


# 画圆  [x1,x2,y1,y2] outline边框颜色 fill填充颜色
draw.ellipse([100,100,600,600],outline='black',fill='white')


# 画半圆 [x1,x2,y1,y2]  弧度 outline弦线颜色 fill填充颜色
draw.chord([100,100,600,600],0,360,outline=125)
draw.chord([100,100,600,600],0,90,outline=158)
draw.chord([100,100,600,600],90,180,outline=99,fill='gray')



# 扇形 [x1,x2,y1,y2]  弧度 outline弦线颜色 fill填充颜色
draw.pieslice([100,100,600,600],180,210,outline=255)
draw.pieslice([100,100,600,600],30,80,fill=255)



# 多边形
draw.polygon([10,23,45,6,77,87],outline='orange')
draw.polygon([10,20,30,40,50,90,70,80,90,100],fill='red')


# 矩形
draw.rectangle((200,200,500,500),outline = "white")
draw.rectangle((250,300,450,400),fill = 128)


# 文字
text = 'hello world '
# 颜色
draw.ink = 0 + 0 * 256 + 255 * 256 * 256
# 加载到图片上
draw.text([200,100],text)
im.show()

深入剖析Python最强大图片处理模块---Pillow

这里每个图形基本都一览无余,如果你的图片像素太小的话,所绘制的图形是不会完整显示在上面的。

三、ImageEnhance

主要是设置图片的颜色对比度亮度锐度啥的,增强图像。

from PIL import  ImageEnhance       
im1=Image.open('4.jpg')   
#调整图像的颜色平衡
cl=ImageEnhance.Color(im1)
ce=cl.enhance(1.2)#对选择的属性数值增强1.3倍
ce.show()
#调整图像的对比度
ct=ImageEnhance.Contrast(im1)
ch=ct.enhance(3.4)
ch.show()
#调整图像的亮度
br=ImageEnhance.Brightness(im1)
be=br.enhance(2.2)
be.show()
#调整图像的锐度
sp=ImageEnhance.Sharpness(im1)
se=sp.enhance(200)
se.show()

深入剖析Python最强大图片处理模块---Pillow

四、ImageFont

字体模块,主要是读取系统内字体以及给图片添加水印效果


from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
font=ImageFont.truetype(r'C:\Windows\Fonts\simsun.ttc',size=40)
im=Image.open('4.jpg')
dw=ImageDraw.Draw(im)
dw.text((50,60),'你好,world',fill='red',font=font)
im.show()

深入剖析Python最强大图片处理模块---Pillow

五、ImageGrab


from PIL import ImageGrab 
im1=ImageGrab.grab((0,0,800,200)) #截取屏幕指定区域的图像 
im2=ImageGrab.grab() #不带参数表示全屏幕截图
im1.show()
im2.show()

深入剖析Python最强大图片处理模块---Pillow

六、ImageFilter

过滤图像的效果。

from PIL import Image, ImageFilter 
im = Image.open('4.jpg') 
# 高斯模糊 
im1=im.filter(ImageFilter.GaussianBlur) 
im1.show()
# 普通模糊 
im2=im.filter(ImageFilter.BLUR) 
im2.show()
# 边缘增强 
im3=im.filter(ImageFilter.EDGE_ENHANCE) 
im3.show()
# 找到边缘 
im4=im.filter(ImageFilter.FIND_EDGES) 
im4.show()
# 浮雕 
im5=im.filter(ImageFilter.EMBOSS) 
im5.show()
# 轮廓 
im6=im.filter(ImageFilter.CONTOUR) 
im6.show()
# 锐化 
im7=im.filter(ImageFilter.SHARPEN) 
im7.show()
# 平滑 
im8=im.filter(ImageFilter.SMOOTH) 
im8.show()
#阙值平滑
im9=im.filter(ImageFilter.SMOOTH_MORE) 
im9.show()
# 细节 
im10=im.filter(ImageFilter.DETAIL)
im10.show()

深入剖析Python最强大图片处理模块---Pillow

pillow 还算是比较强大的一个 模块,他可以轻松实现截屏 水印效果,并且还可以制作字符画,下面请看:

from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
txt = 'meimei'
font = ImageFont.truetype(r'C:\Windows\Fonts\simsun.ttc',9)  #9为字体大小
im_path = '1.jpg'  #原图路径
im = Image.open(im_path)
width, height = im.size 
newImg = Image.new("RGBA",(width, height),(10,10,10))  #背景色rgb,偏黑显示好一些
x=0
for i in range(0,height,9):   #需要与字体大小一致
    for j in range(0,width,9): #需要与字体大小一致
        a,b,c=im.getpixel((j,i)) #获取像素
        draw = ImageDraw.Draw(newImg)
        draw.text( (j,i), (txt[x%(len(txt)):x%(len(txt))+3]), fill=(a,b,c),font=font)
        x+=3
        del draw
newImg.save('00.png','PNG')

深入剖析Python最强大图片处理模块---Pillow

七、总结

通过对Pillow的学习,相信你现在已经能玩转图片的各种骚操作了,配合词云的话就能生成更具特色的图片了。

**-----**------**-----**---**** End **-----**--------**-----**-****

深入剖析Python最强大图片处理模块---Pillow

往期精彩文章推荐:

深入剖析Python最强大图片处理模块---Pillow

欢迎各位大佬点击链接加入群聊【helloworld开发者社区】:https://jq.qq.com/?_wv=1027&k=mBlk6nzX进群交流IT技术热点。

本文转自 https://mp.weixin.qq.com/s/X4a8Yz2TpJan58BI9Aiqaw,如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Irene181 Irene181
2年前
深入剖析Python最强大图片处理模块---Pillow
前言Pillow作为一个图片模块。可谓是真的简便强大,它的前身是PIL,后来将他取代,现在的pillow可谓是一家独大,好了,让我们来看看他的具体用法。    今天我们介绍pillow常用六大模块:1.Image2.ImageDraw3.ImageEnhance        4.ImageFont        5.ImageGrab6.Im
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
2年前
4cast
4castpackageloadcsv.KumarAwanish发布:2020122117:43:04.501348作者:KumarAwanish作者邮箱:awanish00@gmail.com首页:
Stella981 Stella981
2年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这