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

不堪玄鬓影,来对白头吟。

前言

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

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

1.Image

2.ImageDraw

3.ImageEnhance

4.ImageFont

5.ImageGrab

6.ImageFilter

一、Image

from PIL import Imagefrom 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:    passfinally:    im.show() #显示一张图片    im.save('4.jpg','JPEG') #保存图片
from PIL import Imagefrom io import BytesIOimport requests#创建新图片:im1=Image.new('RGBA',(400,400),'red')#从二进制中读取图片res=requests.get('http://pic.sc.chinaz.com/files/pic/pic9/202003/zzpic24077.jpg').contentim2=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位浮点型像素

二、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()

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

三、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()

四、ImageFont

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

from PIL import Imagefrom PIL import ImageDrawfrom PIL import ImageFontfont=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()

五、ImageGrab

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

六、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()

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

from PIL import Imagefrom PIL import ImageDrawfrom PIL import ImageFonttxt = '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=0for 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 drawnewImg.save('00.png','PNG')

七、总结

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

------------------- End -------------------

(0)

相关推荐

  • Darknet YOLOv4修改检测框的粗细、取消显示分类标签

    修改src文件夹下image.c文件如下内容: line369: int width = im.h * .004;//检测框粗细,默认0.002 line444: image label = get_ ...

  • 【每周一坑】蜥蜴流感与贝叶斯定理

    春季是流感的高发季节.不要觉得只是小小的"感冒",严重起来甚至也会危及生命,而且还没有特效药.因此,身体不适请及时到医院检查. 今天的问题就与流感诊断有关.此题取自<深入浅出 ...

  • 不用微信QQ,用Pillow裁剪图片

    先安装pillow pip install pillow 我们要实现的效果如下,随便找一张图,裁剪后的效果图 首先通过open方法打开图片,得到一个Image对象 from PIL import Im ...

  • Python Web开发哪些模块好用?这几类必知!

    关于Python Web开发和图形用户界面的模块有哪些?今天小编通过这篇文章为大家整理了一些常用的模块,我们一起来看看吧. Web开发: 1. Requests:Python内置模块(urllib和u ...

  • Python数据科学常见模块!

    Python在数据科学和人工智能领域非常流行,而且它有很多不同的模块,可以帮助工作人员轻松的完成工作,提高效率.但很多人对Python数据科学及人工智能的模块并不了解,接下来我们通过这篇文章为大家详细 ...

  • 高手如何在Python中使用collections模块

    来源:AI入门学习 介   绍 Python 3有许多内置的数据结构,包括元组.字典和列表.数据结构为我们提供了一种组织和存储数据的方法.collections模块能够帮助我们高效地填充和操作数据结构 ...

  • Python爬图片

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/10/31 17:54 # 爬取图片 import requests from ...

  • 第49天:Python 多线程之 threading 模块

    在之前的文章中,我们已经介绍了 Python 通过 _thread 和 threading 模块提供了对多线程的支持,threading 模块兼具了 _thread 模块的现有功能,又扩展了一些新的功 ...

  • Python 实现图片转字符画,静态图、GIF 都能转

    来源:Python 技术「ID: pythonall」 字符画是一种由字母.标点或其他字符组成的图画,它产生于互联网时代,在聊天软件中使用较多,本文我们看一下如何将自己喜欢的图片转成字符画. 静态图片 ...

  • Python 中的 time 模块

    写代码时,常常会遇到处理时间和日期的问题.在 Python 中,与时间处理最相关的模块是 time 和 datetime.今天我们介绍下 time 模块的常用功能. time 模块包含一些函数用于获取 ...

  • python -m 参数释义 模块

    -m: run library module as a script(将模块当作脚本运行) 解释 在 python 中,所谓的模块,其实也是一个由代码组成的普通脚本文件.这些文件通常会提供一些有用的东 ...

  • Python:图片转字符画(~情人节神器~)

    字符画真的很有意思,将图片中的像素用字符代替,就生成了字符画. 但是像素是有颜色深浅的,我们如何将带有不同颜色的像素编码为对应的字符呢? 转化方法: 将彩色图片转化为灰度图 根据颜色深浅的RGB值(值 ...