🖼️ 前言:当程序员遇上修图
某天加班,老板丢来一堆图片,让我批量改尺寸、加水印、转换格式。我盯着 Photoshop,沉思了一下------这要是手动改,手都点麻了。😵💫
程序员的思路是:能不能写个 Python 脚本自动化处理?
于是,一顿 查资料,发现了 Python 里超强的图像处理库------Pillow(PIL 的升级版)。用它可以做各种图片操作,轻松解决老板的需求!🎉
今天就来给大家盘点 15 个 Pillow 必背的技能,让你玩转 Python 图像处理!💡
1️⃣ 安装 Pillow
开始之前,先安装库:
bash
pip install pillow
然后在 Python 里导入:
python
from PIL import Image
如果这步报错,可能是 pip 版本太旧,更新一下就行:
bash
pip install --upgrade pip
2️⃣ 打开和显示图片
有了 Pillow,我们可以轻松打开图片:
python
img = Image.open("example.jpg")
img.show() # 在默认图片查看器中打开
💡 注意 : show()
只是临时打开,图片并不会修改。
3️⃣ 获取图片信息
看看图片尺寸、格式等信息:
python
print(img.format) # JPEG
print(img.size) # (宽, 高)
print(img.mode) # RGB
4️⃣ 调整图片尺寸(缩放)
想要统一图片尺寸?试试 resize()
:
python
resized_img = img.resize((300, 200)) # 设定新尺寸
resized_img.show()
💡 注意 :缩放可能会失真,可以用 thumbnail()
按比例缩小:
python
img.thumbnail((300, 200))
img.show()
5️⃣ 裁剪图片
截取图片中某个区域,比如剪裁脸部:
python
box = (100, 100, 400, 400) # (左, 上, 右, 下)
cropped_img = img.crop(box)
cropped_img.show()
6️⃣ 旋转和翻转
让图片转个圈:
python
rotated_img = img.rotate(45) # 顺时针旋转 45°
rotated_img.show()
水平翻转(镜像):
python
flipped_img = img.transpose(Image.FLIP_LEFT_RIGHT)
flipped_img.show()
7️⃣ 转换图片模式(灰度图、RGBA)
黑白风格:
python
gray_img = img.convert("L")
gray_img.show()
透明背景(如果原图支持):
python
rgba_img = img.convert("RGBA")
rgba_img.show()
8️⃣ 添加水印
在图片右下角加水印(用 paste()
):
python
from PIL import Image,ImageEnhance
img = Image.open("background.png").convert("RGBA")
watermark = Image.open("watermark.png").convert("RGBA")
alpha = watermark.split()[3] # 提取透明通道
# 调整透明度(0.5 代表 50% 透明度)
alpha = ImageEnhance.Brightness(alpha).enhance(0.5)
# 重新组合水印图像
watermark.putalpha(alpha)
img.paste(watermark, (img.width - watermark.width, img.height - watermark.height), watermark)
img.show()
代码注释
convert("RGBA")
:确保图片是支持透明通道的格式。watermark.split()[3]
:提取水印图片的 Alpha 通道 作为透明度掩码。convert("L")
:如果出现bad transparency mask
错误,可以将watermark
图片转换为 L(灰度)模式,符合Pillow
要求。paste()
:使用mask
作为透明度通道,使水印正确叠加。- 可以使用
ImageEnhance.Brightness()
调整透明度。
9️⃣ 调整亮度、对比度
用 ImageEnhance
轻松调节:
python
from PIL import ImageEnhance
enhancer = ImageEnhance.Brightness(img)
brighter_img = enhancer.enhance(1.5) # 亮度增加 1.5 倍
brighter_img.show()
对比度、锐化、颜色增强也类似。
🔟 叠加文字(加水印文字)
想加个"Python 牛逼"在图片上?
python
from PIL import ImageDraw, ImageFont
draw = ImageDraw.Draw(img)
font = ImageFont.truetype("arial.ttf", 40) # 选择字体
draw.text((50, 50), "Python 牛逼", fill="red", font=font)
img.show()
💡 注意 :Windows 需要提供 .ttf
字体文件,Linux/macOS 可用 "/usr/share/fonts/..."
里的字体。
1️⃣1️⃣ 批量处理图片
假设你要批量压缩图片:
python
import os
folder = "images"
for filename in os.listdir(folder):
if filename.endswith((".jpg", ".jpeg", ".png")):
img = Image.open(os.path.join(folder, filename))
img = img.resize((500, 500))
img.save(os.path.join("output", filename))
💡 注意 :缩放可能会失真,可以用 上面学到的thumbnail()
按比例缩小
1️⃣2️⃣ 图片格式转换
把 PNG 转成 JPG:
python
img = Image.open("example.png")
img.convert("RGB").save("example.jpg", "JPEG")
1️⃣3️⃣ 创建纯色图片
生成一张纯红色的图片:
python
img = Image.new("RGB", (300, 300), "red")
img.show()
1️⃣4️⃣ 读取像素点 & 修改像素
取一个像素的 RGB 值:
python
print(img.getpixel((10, 10))) # (255, 0, 0)
设置像素颜色:
python
img.putpixel((10, 10), (0, 255, 0))
img.show()
1️⃣5️⃣ 图片保存
img.save()
是 Pillow
提供的用于保存图片的方法,支持多种格式,参数灵活,可以控制图片质量、透明度等。
基本用法
python
img.save("output.jpg")
注意:
output.jpg
:保存的文件名,格式由后缀决定(如.jpg
、.png
)。- 默认会覆盖同名文件,需小心操作。
指定格式
有时候你想保存为不同的格式,可以这样:
python
img.save("output.png", format="PNG")
💡 注意 :通常 Pillow
会根据文件后缀自动判断格式,但如果后缀不标准,你需要手动指定 format
。
控制 JPEG 质量
JPEG 图片可以调整压缩质量(0~100),值越高质量越好,文件越大:
python
img.save("output.jpg", quality=85)
💡 默认 quality=75
,一般 85
就够了,超过 95
肉眼几乎无区别,但文件更大。
透明背景(PNG)
如果你保存 PNG
,并且图片带透明通道(RGBA 模式),可以这样:
python
img.save("output.png", transparency=128) # 透明度 0-255
或者:
python
img.save("output.png", optimize=True) # 自动优化大小
💡 如果报 ValueError: bad transparency mask
,说明透明通道有问题,可以试试:
python
if img.mode != "RGBA":
img = img.convert("RGBA")
去掉 EXIF 信息
有时候图片会带 EXIF 信息(如拍摄时间、GPS 等),如果不想保存:
python
img.save("output.jpg", quality=85, exif=None)
🎉 总结
Pillow 让 Python 处理图片变得超级简单!今天我们学会了 15 个核心技能,包括: ✅ 打开、保存、格式转换 ✅ 调整尺寸、裁剪、旋转 ✅ 添加文字、水印、滤镜 ✅ 读取 & 修改像素
有了这些技能,下一次老板再让你批量改图,你就可以用 Python 轻松搞定!🚀
你最喜欢哪个技巧?评论区聊聊!💬