一、介绍
Pillow 是 Python 中一个功能强大且易用的图像处理库,是经典库 PIL(Python Imaging Library)的现代分支,它广泛用于图像打开、编辑、保存和格式转换等操作。
二、功能介绍
1. 图像读写
支持多种格式(JPEG、PNG、GIF、BMP、TIFF 等),并可处理不同颜色模式(RGB、CMYK 等)。
from PIL import Image
image = Image.open("input.jpg") # 打开图像
image.save("output.png") # 保存为 PNG 格式
2. 图像处理
1)调整尺寸
from PIL import Image
catIm = Image.open('zophie.png')
width, height = catIm.size
quartersizedIm = catIm.resize((int(width / 2), int(height /
quartersizedIm.save('quartersized.png')
svelteIm = catIm.resize((width, height + 300))
svelteIm.save('svelte.png')
2)旋转和翻转图像
from PIL import Image
catIm = Image.open('zophie.png')
catIm.rotate(90).save('rotated90.png')
catIm.rotate(180).save('rotated180.png')
catIm.rotate(270).save('rotated270.png')
3)裁切
裁剪不是在原图上发生的,也就 是说,原始的Image对象原封不动,crop()方法返回⼀个新的 Image对象。
from PIL import Image
catIm = Image.open('zophie.png')
croppedIm = catIm.crop((335, 345, 565, 560)) # 定义裁剪区域 (左, 上, 右, 下)
croppedIm.save('cropped.png')
4)滤镜效果
from PIL import ImageFilter
blurred = image.filter(ImageFilter.BLUR) # 模糊滤镜
5)生成缩略图
from PIL import Image
# 打开图像并调整尺寸
image = Image.open("photo.jpg")
thumbnail_size = (200, 200)
image.thumbnail(thumbnail_size)
# 保存缩略图
image.save("thumbnail.jpg", "JPEG")
6)添加水印
from PIL import Image, ImageDraw, ImageFont
def add_watermark(image_path, output_path, text):
img = Image.open(image_path)
draw = ImageDraw.Draw(img)
font = ImageFont.truetype('arial.ttf', 66)
# 计算文字尺寸
bbox = draw.textbbox((0, 0), text, font=font)
text_width, text_height = bbox[2] - bbox[0], bbox[3] - bbox[1]
draw.text(((img.width - text_width - 10), (img.height - text_height - 10)),
text, font=font, fill=(255, 255, 255, 128))
img.save(output_path)
add_watermark('input.jpg', 'watermarked.jpg', 'Copyright 2025')
print('Done')
3. 绘图功能
1)支持绘制几何图形和文字
from PIL import ImageDraw
draw = ImageDraw.Draw(image)
draw.rectangle((50, 50, 150, 150), fill="red") # 画红色矩形
draw.text((50, 30), "Hello Pillow", fill="white") # 添加文字
2)新建图像
from PIL import Image
im = Image.new('RGBA', (100, 200), 'purple')
im.save('purpleImage.png')
# 默认的颜⾊是不可见的⿊⾊(0, 0, 0, 0),因此第⼆个图像具有透明背景
im2 = Image.new('RGBA', (200, 200))
im2.save('test.png')