Pillow

144 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第25天,点击查看活动详情

Pillow

Pillow 官网

Pillow 是 PIL 的一个友好的分支(PIL 是 Python Imaging Library 的缩写)

安装 Pillow

python3 -m pip install --upgrade pip
python3 -m pip install --upgrade Pillow

基本使用

使用 Image 类

from PIL import Image

读取图片

image.open([图片名称]):读取图片

  • 类似文件的对象:with open("hopper.ppm", "rb") as fp: im = Image.open(fp)
  • 二进制流:image = Image.open(io.BytesIO(buffer))
    • import io
  • 从 tar 文档读取:image = Image.open(TarIO.TarIO("Tests/images/hopper.tar", "hopper.jpg"))
    • from PIL import Image, TarIO

基本属性

image.format:图片的来源,如果图片不是从文件读取,则为 None image.size:包含宽度和高度的二元组(以像素为单位) image.mode:定义图片中条带的数量和名称,包括像素类型和深度

  • L(luminance):灰度图像
  • RGB:真彩图像
  • CMYK:印前图像

裁剪图片

crop():从图片中提取子区域

例子

box = (100, 100, 400, 400)
region = image.crop(box)

区域由 4 元组定义,其坐标是(左、上、右、下)。Python Imaging Library 使用左上角为 (0,0) 的坐标系。还要注意,坐标指的是像素之间的位置,因此上面示例中的区域正好是 300x300 像素

调整图片大小

out = image.resize((128, 128))

旋转图片

  1. transpose():既可以旋转图像,也可以围绕图像的水平轴或垂直轴翻转图像
    • region = region.transpose(Image.Transpose.ROTATE_180)
    • region = region.transpose(Image.Transpose.FLIP_LEFT_RIGHT)
    • region = region.transpose(Image.Transpose.FLIP_TOP_BOTTOM)
    • region = region.transpose(Image.Transpose.ROTATE_90)
    • region = region.transpose(Image.Transpose.ROTATE_180)
    • region = region.transpose(Image.Transpose.ROTATE_270)
  2. rotate():取逆时针方向的角度(度),要以 90 度的步长旋转图像
    • out = image.rotate(45)

粘贴图片

box = (100, 100, 400, 400)
image.paste(region, box)

region 粘贴在 image 指定的区域 box

拆分和合并颜色通道

r, g, b = image.split()
im = Image.merge("RGB", (b, g, r))

对于单波段图像,返回图像本身

要使用各个色带,可能需要先将图像转换为“RGB”

加载图片

image.show():加载图片

保存图片

image.save([图片路径]):保存图片

  • im.save([图片路径],"[JPEG]"):第二个参数显式指定文件格式,如果使用非标准扩展名,则必须始终以以下方式指定格式