当前位置:首页>python>Python零基础入门(十二):Pillow处理图片(上)

Python零基础入门(十二):Pillow处理图片(上)

  • 2026-10-11 06:37:04
Python零基础入门(十二):Pillow处理图片(上)

Python零基础入门(十二):Pillow处理图片

产品说:"把这500张商品图统一改成800x600,加个水印,今天下班前要。"

我打开Photoshop,看了看进度条,默默关掉了。

Python三行代码,两分钟搞定。这就是Pillow——Python生态里最常用的图片处理库。

一、Pillow能干什么

一句话:Photoshop能做的日常操作,Pillow基本都能用代码搞定。

批量改尺寸、加水印、转格式、调亮度对比度、裁剪拼图、画验证码……这些你在工作中大概率会遇到的需求,Pillow全包了。而且它是纯Python库,不依赖OpenCV那些重量级依赖,装上就能用。

具体来说,Pillow常干这些活:

  • • 批量改尺寸——电商商品图统一规格
  • • 加水印——防盗图,批量加版权文字
  • • 转格式——PNG转JPG、WebP,控制压缩质量
  • • 调色——亮度、对比度、饱和度、锐化
  • • 裁剪拼图——证件照裁剪、缩略图网格
  • • 滤镜特效——模糊、浮雕、轮廓线
  • • 画图写字——验证码、海报、数据可视化

二、安装和导入

一行命令:

pip install Pillow

国内慢的话加镜像:

pip install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple Pillow

装完验证一下,不报错就OK:

python -c "from PIL import Image; print('OK')"

常用模块就这几个,按需导入:

from PIL import Image          # 图片基本操作from PIL import ImageDraw      # 画文字、图形from PIL import ImageFont      # 字体from PIL import ImageFilter    # 滤镜from PIL import ImageEnhance   # 亮度、对比度、饱和度

三、打开和查看图片

先从最基本的开始——打开一张图片,看看它是什么格式、多大尺寸:

from PIL import Imageimg = Image.open("photo.jpg")print(img.format)   # JPEGprint(img.size)     # (1920, 1080) 宽x高print(img.mode)     # RGBprint(img.width)    # 1920print(img.height)   # 1080img.show()  # 调用系统图片查看器

注意 img.size 返回的是 (宽, 高) ,不是(高, 宽)。这个约定跟OpenCV不一样,踩过坑的人都懂。

保存的时候可以直接转格式,还能控制压缩质量:

# 转格式直接保存img.save("photo.png")img.save("photo.webp")# JPEG控制质量:50体积小,95接近原图img.save("photo_low.jpg", quality=50)img.save("photo_high.jpg", quality=95)

从零创建一张空白图片也很常用——比如做个白色画布再往上面画东西:

# 纯色图片:模式、尺寸、颜色red_img = Image.new("RGB", (800, 600), "red")blue_img = Image.new("RGB", (800, 600), (0, 0, 255))# 透明图片用RGBAtransparent = Image.new("RGBA", (800, 600), (255, 255, 255, 0))

四、缩放和裁剪

两个都能缩放,但行为不一样:

img = Image.open("photo.jpg")# resize:强制拉到指定尺寸,不管宽高比resized = img.resize((800, 600))# thumbnail:等比缩放,结果不会超过指定尺寸img_thumb = Image.open("photo.jpg")img_thumb.thumbnail((400, 400))  # 宽高都不超过400

踩坑点:thumbnail()是原地修改,没有返回值;resize()返回新图片。写成 img = img.thumbnail(...) 就等着调试吧。

按比例缩放的工具函数:

def resize_by_ratio(img, ratio):    new_width = int(img.width * ratio)    new_height = int(img.height * ratio)    return img.resize((new_width, new_height))half_img = resize_by_ratio(img, 0.5)

裁剪用 crop(),参数是  (左, 上, 右, 下)  四个坐标:

# 裁出左上角区域box = (100, 100, 500, 400)cropped = img.crop(box)cropped.save("cropped.jpg")

居中裁成正方形,这个用得很多(比如头像):

def crop_center_square(img):    width, height = img.size    size = min(width, height)    left = (width - size) // 2    top = (height - size) // 2    return img.crop((left, top, left + size, top + size))

五、旋转和翻转

img = Image.open("photo.jpg")# 旋转(逆时针为正方向)rotated_90 = img.rotate(90)rotated_45 = img.rotate(45)# 旋转后画布不够大会被裁掉,加expand=True自动扩展rotated_45 = img.rotate(45, expand=True)# 空白区域填白色rotated_45 = img.rotate(45, fillcolor=(255, 255, 255))# 翻转flipped_h = img.transpose(Image.FLIP_LEFT_RIGHT)   # 水平镜像flipped_v = img.transpose(Image.FLIP_TOP_BOTTOM)    # 垂直翻转

rotate(45)如果不加 expand=True,图片四角会被裁掉。做验证码旋转增强的时候特别容易忘这个参数。

六、小结

上篇搞定了Pillow的基础操作:

  • • 打开/保存:Image.open() 和 .save(),直接转格式、控质量
  • • 缩放:resize()强制尺寸,thumbnail()等比缩放
  • • 裁剪:crop()传四个坐标 (左, 上, 右, 下)
  • • 旋转翻转:rotate() 和 transpose()

👉 下篇我们搞颜色处理、绘制文字图形、批量处理。点击阅读:Python零基础入门(十三):Pillow处理图片进阶

最新文章

随机文章