1 说明:
======
1.1 PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。
1.2 由于PIL仅支持到Python 2.7,加上年久失修,所以诞生:Pillow。
1.3 于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x。
1.4 Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库。
===终于搞清楚PIL和Pillow的关系了===

2 准备:
=====
2.1 官网:
https://github.com/python-pillow/Pillow
https://python-pillow.org/
https://pillow.readthedocs.io/en/latest/index.html

2.2 安装:
#比较正规的安装方法,官方推荐
python3 -m pip install --upgrade pip #先升级pip
python3 -m pip install --upgrade Pillow #安装pillow

2.3 环境:
华为笔记本电脑、深度deepin-linux操作系统、谷歌浏览器、python3.8和微软vscode编辑器。
2.4 注意:
#python2
import Image
#python3(因为是派生的PIL库,所以要导入PIL中的Image)
#本机是python3,也相信大多数python用户已经使用python3了
from PIL import Image
3 系统默认图片编辑器ImageMagick:显示图片
====================================
3.1 代码:
from PIL import Image
#打开图片,并默认显示,注意图片格式
im = Image.open("/home/xgj/Desktop/pillow/11.jpeg")
#im = Image.open("/home/xgj/Desktop/pillow/22.jpg")
#im = Image.open("/home/xgj/Desktop/pillow/33.png")
#im = Image.open("/home/xgj/Desktop/pillow/44.gif") #此方法不能显示动态gif
im.show()
3.2 操作和效果图:

3.3 参数和保存,代码:
from PIL import Image
#打开图片,并默认显示,注意图片格式
im = Image.open("/home/xgj/Desktop/pillow/11.jpeg")
im.show() #启动默认图片编辑器显示
#format格式:jpeg,大写JPEG
#size属性是一个tuple,表示图像的宽和高(单位为像素)
#mode属性为表示图像的模式,常用的模式为:L为灰度图,RGB为真彩色,CMYK为pre-press图像。
print(im.format, im.size, im.mode)
#保存,注意在保存时,自动格式转换,以下已经测试过
#im.save("/home/xgj/Desktop/pillow/110.jpeg")
#im.save("/home/xgj/Desktop/pillow/111.jpg")
#im.save("/home/xgj/Desktop/pillow/112.png")
#im.save("/home/xgj/Desktop/pillow/113.bmp")
4 采用matplotlib显示图片:
===================
4.1 代码:
from PIL import Image
import matplotlib.pyplot as plt
#打开图片,并默认显示,注意图片格式
im = Image.open("/home/xgj/Desktop/pillow/11.jpeg")
#im.show() #默认图片显示器显示图片
#plt显示图片
plt.imshow(im)
plt.show()
4.2 效果图:

5 图片缩放:
=========
5.1 代码:
from PIL import Image
#打开原图片
im = Image.open("/home/xgj/Desktop/pillow/11.jpeg")
#图片缩放,即图片大小按比例修改,数值可自定义
imnew = im.resize((100,100)) #参数表示图像的新尺寸,分别表示宽度和高度
#展示新图
imnew.show()
#保存新图
imnew.save("/home/xgj/Desktop/pillow/small.jpg")
5.2 图:

5.3 用matplotlib一起展示2个图
5.3.1 代码:复习matplotlib的subplot
from PIL import Image
import matplotlib.pyplot as plt
#打开原图片
im = Image.open("/home/xgj/Desktop/pillow/11.jpeg")
#图片缩放,即图片大小按比例修改,数值可自定义
imnew = im.resize((100,100)) #参数表示图像的新尺寸,分别表示宽度和高度
fig = plt.figure()
ax = fig.add_subplot(221) #第一个子图
ax.imshow(im) #默认配置
ax = fig.add_subplot(222) #第二个子图
ax.imshow(imnew) #默认配置
plt.show() #显示图像
5.3.2 图:

6 转换灰度并显示:
==============
6.1 代码:
from PIL import Image
#打开图片,并默认显示,注意图片格式
im = Image.open("/home/xgj/Desktop/pillow/11.jpeg")
# 将彩色转换成灰阶
greyscale_image = im.convert('L')
#im.show() #不能显示转换后的灰度照片
#im.show(greyscale_image) #不能显示转换后的灰度照片
#im.show(greyscale_image,cmap='gray') #报错
#只能用matplotlib显示转换后灰度照片
import matplotlib.pyplot as plt
# 注意要注明cmap='gray'才能够正确秀出灰阶图像
plt.imshow(greyscale_image,cmap='gray')
plt.show()
6.2 效果图:

7 画图和文字输出:
=============
7.1 代码:
from PIL import Image,ImageDraw,ImageFont
import matplotlib.pyplot as plt
# 产生一个有4个颜色channels的空白图像,大小,背景颜色设置
blank_image = Image.new('RGBA',(400,300),'black')
# 在blank_image 图像上绘图
img_draw = ImageDraw.Draw(blank_image)
# 画一个矩形,元组(X,Y,X,Y),高150,长200
img_draw.rectangle((70,50,270,200),outline='red',fill='yellow')
# 取得字形物件
fnt = ImageFont.truetype('hwfs.ttf',20) # 修改电脑上的字型,字体可自行*载下**
# 放上文字信息到图像上
img_draw.text((70,250),'Hello world==你好世界',font=fnt,fill='purple')
plt.imshow(blank_image)
plt.show()
7.2 效果图:

7.3 在图片上输出文字,代码:
from PIL import Image,ImageDraw,ImageFont
import matplotlib.pyplot as plt
#打开一张图片
im = Image.open("/home/xgj/Desktop/pillow/11.jpeg")
# 在图像上输出文字
img_draw = ImageDraw.Draw(im)
# 取得字形物件
fnt = ImageFont.truetype('hwfs.ttf',40) # 修改电脑上的字型,字体可自行*载下**
# 放上文字信息到图像上
img_draw.text((70,250),'生如夏花之绚烂',font=fnt,fill='red')
plt.imshow(im)
plt.show()
7.4 图:

8 创建随机字母码:
=============
8.1 代码:
from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random
# 随机字母:
def rndChar():
return chr(random.randint(65, 90))
# 随机颜色1:
def rndColor():
return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))
# 随机颜色2:
def rndColor2():
return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))
a=300
width = a*4
height = a
image = Image.new('RGB', (width, height), (255, 255, 255))
# 创建Font对象:
font = ImageFont.truetype('hwfs.ttf', 200)
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 填充每个像素:
for x in range(width):
for y in range(height):
draw.point((x, y), fill=rndColor())
# 输出文字:
for t in range(4):
draw.text((a * t + 10, 10), rndChar(), font=font, fill=rndColor2())
# 模糊:
image = image.filter(ImageFilter.BLUR)
image.show()
image.save('/home/xgj/Desktop/pillow/code.jpg')
8.2 效果图:

===自己整理并分享出来===
喜欢的人,请点赞、关注、评论、转发和收藏。