Pillow(PIL)入门教程(非常详细) (biancheng.net)
Pillow (PIL Fork) 10.3.0.dev0 documentation
PIL中最重要的类,表示一张图片对象,在Image模块中定义。有多种方法实例化这个类,例如通过加载文件,处理其他图片和生成图片。
from PIL import Image
im = Image.open("logo.png")
'''
下述方法等价
with Image.open("logo.png") as im
...
with open("logo.png", "rb") as f:
im3 = Image.open(f)
...
with open("logo.png", "rb") as f:
im4 = Image.open(io.BytesIO(f.read()))
'''
包含PIL.Image.new(),PIL.Image.fromarray(), PIL.Image.frombytes(),PIL.Image.frombuffer()等
具体参照Image Module - Pillow (PIL Fork) 10.3.0.dev0 documentation
PIL.Image.new(mode, size, color=0)
参数:
PIL.Image.fromarray(obj, mode=None)
参数:
from PIL import Image
import numpy as np
a = np.zeros((5, 5))
im = Image.fromarray(a)
对于NumPy,Pillow的模式并不总是匹配,Pillow只提供1-bit,8-bit,32-bit符号整型和32-bit浮点像素。
mode不会转换数据,而是改变数据读取的方式
from PIL import Image
import numpy as np
a = np.full((1, 1), 300)
im = Image.fromarray(a, mode="L")
im.getpixel((0, 0)) # 44
im = Image.fromarray(a, mode="RGB")
im.getpixel((0, 0)) # (44, 1, 0)
Pillow图像同样可以转换为矩阵
from PIL import Image
import numpy as np
im = Image.open("hopper.jpg")
a = np.asarray(im)
生成中心为128的高斯噪声
PIL.Image.effect_noise(size, sigma)
参数:
from PIL import Image
import numpy as np
a = np.full((1, 1), 300)
im = Image.fromarray(a, mode="F")
im = Image.effect_noise((128,128),20)
im.show()
Image.show(title=None)
内部调用PIL.ImageShow.show()
Image.save(fp, format=None, **params)
参数:
Image.convert(mode=None, matrix=None, dither=None, palette=Palette.WEB, colors=256)
参数:
from PIL import Image
im = Image.open("logo.png")
#此时返回一个新的image对象,转换图片模式
image=im.convert('RGB')
Image.copy()
from PIL import Image
im = Image.open("logo.png")
im_copy = im.copy()
im_copy.show()
Image.crop(box=None)
参数:
from PIL import Image
with Image.open("hopper.jpg") as im:
# The crop method from the Image module takes four coordinates as input.
# The right can also be represented as (left+width)
# and lower can be represented as (upper+height).
(left, upper, right, lower) = (20, 20, 100, 100)
# Here the image "im" is cropped and assigned to new variable im_crop
im_crop = im.crop((left, upper, right, lower))
Image.draft(mode, size)
返回一个尽可能接近给定mode和尺寸的图像,可以用来做彩色Jpeg到灰度图转换,但这种方式是原地的。
参数
mode 目标mode
size 目标尺寸
Image.resize(size, resample=None, box=None, reducing_gap=None)
返回一个缩放副本
参数:
from PIL import Image
with Image.open("hopper.jpg") as im:
# Provide the target width and height of the image
(width, height) = (im.width // 2, im.height // 2)
im_resized = im.resize((width, height))
Image.rotate(angle, resample=Resampling.NEAREST, expand=0, center=None, translate=None, fillcolor=None)
参数:
from PIL import Image
im = Image.open("logo.png")
im_out=im.rotate(45)
im_out.show()
Image.transpose(method)
参数:
参照Pillow Image对象属性 (biancheng.net)
1
1x1位像素L
1x8位像素 灰度P
1x8位像素 使用调色板映射到任何其他模式RGB
(3x8位 真彩色)RGBA
(4x8位 真彩色 + 透明通道)CMYK
(4x8位 印刷色彩 )YCbCr
(3x8位 彩色视频格式)LAB
(3x8位 Lab色彩空间)HSV
(3x8位 色相 饱和度 色明度 )I
(1x32 位有符号整数)F
(1x32 位浮点像素)Image.open() 会读取打开文件的Metadata,文件保持打开状态以供进一步处理
Image.Image.load() 当需要像素数据时,会调用load(),当前帧读取到内存中,任何基于其他图像创建的图像会内部调用原图像load()然后读取数据。如果是单帧图像,在当前帧读取后需要关闭文件,多帧图像(TIFF,或GIF)保持打开,正常情况下不需要调用,图像类会自动加载。
Image.Image.close()会关闭文件并摧毁core图像对象,Pillow上下文控制器也会关闭文件,但是不会摧毁图像对象。当文件关闭后,需要文件访问的操作会失败。
with Image.open("test.jpg") as img:
img.load()
assert img.fp is None
img.save("test.png")
with open("test.jpg", "rb") as f:
im5 = Image.open(f)
im5.load() # FAILS, closed file
with Image.open("test.jpg") as im6:
pass
im6.load() # FAILS, closed file