官方网站:https://pillow.readthedocs.io/en/4.3.x/
参考链接:
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014320027235877860c87af5544f25a8deeb55141d60c5000
PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。
由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow。
安装命令: pip3 install pillow
基本操作:
>>> from PIL import Image
>>> # 生成对应图片的img对象
>>> img = Image.open('C:/Users/Administrator/Desktop/g2.jpg')
>>> # 宽度和高度的像素值
>>> img.size
(320, 180)
>>> # 图像格式
>>> img.format
'JPEG'
>>> # 图片模式,有L,RGB和CMYK等
>>> img.mode
'RGB'
>>> # 获取(1, 2)坐标处的RGB通道值
>>> img.getpixel((1, 2))
(79, 123, 188)
>>> # 将图像转化为灰度图像
>>> img = img.convert('L')
>>> # 将图片的宽度和高度都变为(180, 180)
>>> img = img.resize((180, 180))
>>> # 展示图像
>>> img.show()
>>> # 保存图像
>>> img.save('C:/Users/Administrator/Desktop/g.jpg')
相关操作:
from PIL import Image, ImageFilter
img = Image.open('1.jpg')
# 模糊操作
img_blur = img.filter(ImageFilter.BLUR)
img_blur.show()
# 将三个通道分离的图像
r, g, b = img.split()
r.show()
g.show()
b.show()
# 滤镜操作
img_detail = img.filter(ImageFilter.DETAIL)
img_detail.show()
# 逆时针
img_rotate = img.rotate(90)
img_rotate.show()
from PIL import Image, ImageDraw, ImageFont
import random
def random_color():
return random.randint(64, 255), random.randint(64, 255), random.randint(64, 255)
def random_color2():
return random.randint(32, 127), random.randint(32, 127), random.randint(32, 127)
def random_char():
return chr(random.randint(65, 90))
# 创建图像,默认为黑色,可以修改参数color=(r, g, b)的值来赋予颜色
img = Image.new('RGB', (240, 60))
# 创建字体,使用系统自带的ttf字体文件
img_font = ImageFont.truetype(r'C:\Windows\Fonts\arial.ttf', 40)
# 生成ImageDraw对象,能对图像进行注释,修描等操作
draw = ImageDraw.Draw(img)
for x in range(240):
for y in range(60):
draw.point((x, y), fill=random_color())
for k in range(4):
draw.text((60 * k + 10, 10), random_char(), font=img_font, fill=random_color2())
img.show()
Image对象与array之间的转换
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img = np.array(Image.open('1.jpg'))
# 坐标(100, 100)RGB元组值
print(img[100, 100])
# array的类型:uint8
print(img.dtype)
# 展示array代表的图像
plt.imshow(img)
# 将array转换为Image对象
image = Image.fromarray(img)
image.show()
plt.show()