使用jupyter前添加配置
%matplotlib inline
# %matplotlib notebook
从文件加载图像,使用 open()
函数,使用show()
函数来显示图片。这种图片显示方式是调用操作系统自带的图片浏览器来打开图片,有些时候这种方式不太方便,因此以使用matplotlib来显示。
from PIL import Image
import matplotlib.pyplot as plt
p1 = Image.open('dog1.webp')
plt.figure("dog")
plt.imshow(p1)
plt.show()
format
这个属性标识了图像来源。如果图像不是从文件读取它的值就是None。
size
属性是一个二元tuple,包含width和height(宽度和高度,单位都是px)。
mode
属性定义了图像bands的数量和名称,以及像素类型和深度。常见的modes 有 “L”
(luminance) 表示灰度图像, “RGB” 表示真彩色图像, and “CMYK” 表示出版图像。
print(p1.format, p1.size, p1.mode)
WEBP (1920, 1200) RGB
Image 类的 save()
方法。保存文件的时候文件名变得重要了。除非你指定格式,否则这个库将会以文件名的扩展名作为格式保存。
p1.save('dog1.png')
可以看到图片成功保存为png格式,并且可以打开。
from PIL import Image
import matplotlib.pyplot as plt
p2 = Image.open('dog1.png')
plt.figure("dog1")
plt.imshow(p1)
plt.show()
使用thumbnail
函数裁剪图片(注意,函数参数是一个(x,y)尺寸的元组)
size = (128, 80)
p1.thumbnail(size)
p1.save('dog1.jpeg')
打开看一下:
from PIL import Image
import matplotlib.pyplot as plt
p3 = Image.open('dog1.jpeg')
plt.figure("dog1")
plt.imshow(p3)
plt.show()
print(p1.format, p1.size, p1.mode)
WEBP (128, 80) RGB
pic_mode = p1.convert('模式')
图片有很多模式,支持以下标准模式
模式 | 解释 |
---|---|
1 | 1位像素,黑白,每字节存储一个像素 |
L | 8位像素,黑白 |
P | 8位像素,使用调色板映射到任何其他模式 |
RGB | 3x8位像素,真彩 |
RGBA | 4x8位像素,带透明蒙版的真彩 |
CMYK | 4x8位像素,分色 |
YCbCr | 3x8位像素,彩色视频格式 |
LAB | 3x8位像素,L* a* b颜色空间 |
HSV | 3x8位像素,色相,饱和度,值颜色空间 |
T | 32位有符号整数像素 |
F | 32位浮点像素 |
Pillow还提供了一些额外模式的有限支持,包括:
LA
(L with alpha)PA
(P with alpha)RGBX
(true color with padding)RGBa
(true color with premultiplied alpha)La
(L with premultiplied alpha)I;16
(16-bit unsigned integer pixels)I;16L
(16-bit little endian unsigned integer pixels)I;16B
(16-bit big endian unsigned integer pixels)I;16N
(16-bit native endian unsigned integer pixels)BGR;15
(15-bit reversed true colour)BGR;16
(16-bit reversed true colour)BGR;24
(24-bit reversed true colour)BGR;32
(32-bit reversed true colour)from PIL import Image
import matplotlib.pyplot as plt
p1 = Image.open('dog1.webp')
plt.figure("dog")
plt.imshow(p1)
plt.show()
plt.figure("dog")
pic_mode = p1.convert('1')
plt.imshow(pic_mode)
plt.show()
plt.figure("dog")
pic_mode = p1.convert('L')
plt.imshow(pic_mode)
plt.show()
plt.figure("dog")
pic_mode = p1.convert('P')
plt.imshow(pic_mode)
plt.show()
plt.figure("dog")
pic_mode = p1.convert('RGBA')
plt.imshow(pic_mode)
plt.show()
plt.figure("dog")
pic_mode = p1.convert('CMYK')
plt.imshow(pic_mode)
plt.show()
plt.figure("dog")
pic_mode = p1.convert('HSV')
plt.imshow(pic_mode)
plt.show()
plt.figure("dog")
pic_mode = p1.convert('LA')
plt.imshow(pic_mode)
plt.show()
plt.figure("dog")
pic_mode = p1.convert('F')
plt.imshow(pic_mode)
plt.show()
fp = open("dog2.png", "rb")
im = Image.open(fp)
plt.imshow(im)
plt.show()
p1.size
(1920, 1200)
p1 = Image.open('dog2.png')
size = (p1.size[0]//5,p1.size[1]//5)
p1.thumbnail(size)
plt.imshow(p1)
plt.show()
print(p1.size)
(165, 200)
p1 = Image.open('dog2.png')
size = (p1.size[0]*3,p1.size[1]*3)
p1.thumbnail(size)
plt.imshow(p1)
plt.show()
print(p1.size)
(825, 1000)
p1 = Image.open('dog2.png')
print(p1.size)
(825, 1000)
cut = p1.crop(box=(200, 100,600, 500)) # 左、上、右、下
plt.imshow(cut)
plt.show()
print(cut.size)
(400, 400)
ro = Image.open('dog2.png')
ro = ro.rotate(45) # 逆时针
plt.imshow(ro)
plt.show()
还有transpose()
参数有Transpose.FLIP_LEFT_RIGHT
,Transpose.FLIP_TOP_BOcodeOM
,Transpose.ROTATE_度数
from PIL.Image import Transpose
ro = Image.open('dog2.png')
ro = ro.transpose(Transpose.ROTATE_90)
plt.imshow(ro)
plt.show()
ImageFilter是PIL的滤镜模块,通过这些预定义的滤镜,可以方便的对图片进行一些过滤操作,从而去掉图片中的噪音(部分的消除),这样可以降低将来处理的复杂度(如模式识别等)。
ImageFilter.BLUR 模糊滤镜
ImageFilter.CONTOUR 轮廓
ImageFilter.EDGE_ENHANCE 边界加强
ImageFilter.EDGE_ENHANCE_MORE 边界加强(阀值更大)
ImageFilter.EMBOSS 浮雕滤镜
ImageFilter.FIND_EDGES 边界滤镜
ImageFilter.SMOOTH 平滑滤镜
ImageFilter.SMOOTH_MORE 平滑滤镜(阀值更大)
ImageFilter.SHARPEN 锐化滤镜
from PIL import ImageFilter
p1 = Image.open('dog2.png')
p1 = p1.filter(ImageFilter.EMBOSS)
plt.imshow(p1)
plt.show()