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

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

  • 2026-10-11 06:51:56
Python零基础入门(八):Pillow图片处理基础

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

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

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

Python三行代码,两分钟搞定。

一、安装和导入

一行命令:

pip install Pillow

国内慢的话加镜像:

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

验证一下:

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.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))

三、调整尺寸和裁剪

resize vs thumbnail

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

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()返回新图片。

按比例缩放的工具函数:

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()的参数是(左, 上, 右, 下)四个坐标:

img = Image.open("photo.jpg")# 裁出左上角区域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)    # 垂直翻转

五、颜色处理

转灰度、转黑白

img = Image.open("photo.jpg")gray = img.convert("L")      # 灰度图bw = img.convert("1")        # 黑白二值图rgba = img.convert("RGBA")   # 加透明通道

调亮度、对比度、饱和度

用法都一样——创建增强器,调倍数:

from PIL import ImageEnhanceimg = Image.open("photo.jpg")# 亮度(1.0原图,<1暗,>1亮)bright = ImageEnhance.Brightness(img).enhance(1.5)# 对比度contrast = ImageEnhance.Contrast(img).enhance(1.8)# 饱和度(0就是灰度图)saturated = ImageEnhance.Color(img).enhance(2.0)# 锐度sharp = ImageEnhance.Sharpness(img).enhance(2.0)

滤镜效果

from PIL import ImageFilterimg = Image.open("photo.jpg")blurred = img.filter(ImageFilter.BLUR)                          # 模糊gaussian = img.filter(ImageFilter.GaussianBlur(radius=5))       # 高斯模糊,可调半径contour = img.filter(ImageFilter.CONTOUR)                       # 轮廓线emboss = img.filter(ImageFilter.EMBOSS)                         # 浮雕sharpen = img.filter(ImageFilter.SHARPEN)                       # 锐化

几种滤镜组合起来,能出不少有意思的效果。


小结

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

  • • 打开/保存:Image.open()和.save()
  • • 缩放:resize()强制尺寸,thumbnail()等比缩放
  • • 裁剪:crop()传四个坐标
  • • 旋转翻转:rotate()和transpose()
  • • 颜色:convert()转模式,ImageEnhance调参数,ImageFilter加滤镜

下篇我们搞点实用的——绘制文字图形、批量处理、做个证件照生成器。👉 点击阅读下篇

最新文章

随机文章