使用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()
