大家好呀!今天我要和大家分享一个超级有趣的Python库——Pillow(PIL的继承者)。它就像是一个图像处理的百宝箱,可以帮我们轻松处理各种图片。无论是调整图片大小、添加滤镜效果,还是制作表情包,都是小菜一碟。不需要昂贵的Photoshop,用Python也能玩转图片处理!让我们一起开启这段神奇的图片处理之旅吧!
1. 初识Pillow
首先,我们需要安装Pillow:
# 安装Pillow
pip install Pillow
# 导入Pillow
from PIL import Image, ImageDraw, ImageFont, ImageFilter
小贴士:虽然导入时用的是PIL,但别被迷惑了,这就是Pillow库。PIL是Python Imaging Library的缩写,Pillow是它的一个分支版本。
2. 基础图片操作
让我们从最基本的图片操作开始:
# 打开图片
img = Image.open('cat.jpg')
# 获取图片信息
print(f"图片大小:{img.size}") # 输出:(宽, 高)
print(f"图片格式:{img.format}") # 输出:JPEG、PNG等
print(f"图片模式:{img.mode}") # 输出:RGB、RGBA等
# 保存图片
img.save('new_cat.jpg')
# 显示图片(如果你在jupyter notebook中)
img.show()
3. 图片变形记:调整大小和旋转
# 调整图片大小
resized_img = img.resize((300, 200)) # 直接指定新的尺寸
# 等比例缩放
width, height = img.size
new_width = 300
new_height = int(height * (new_width/width))
proportional_img = img.resize((new_width, new_height))
# 旋转图片
rotated_img = img.rotate(45) # 旋转45度
rotated_img_with_expand = img.rotate(45, expand=True) # 旋转时扩展画布
# 翻转图片
flipped_img = img.transpose(Image.FLIP_LEFT_RIGHT) # 水平翻转
flipped_img_vertical = img.transpose(Image.FLIP_TOP_BOTTOM) # 垂直翻转
小贴士:resize时直接指定尺寸可能会导致图片变形,建议使用等比例缩放来保持图片比例。
4. 图片滤镜:让照片更出彩
# 模糊效果
blurred = img.filter(ImageFilter.BLUR)
# 轮廓效果
contour = img.filter(ImageFilter.CONTOUR)
# 浮雕效果
emboss = img.filter(ImageFilter.EMBOSS)
# 锐化
sharpen = img.filter(ImageFilter.SHARPEN)
# 自定义模糊程度
gaussian_blur = img.filter(ImageFilter.GaussianBlur(radius=2))
5. 图片拼贴和裁剪
# 裁剪图片
# 参数为:(左, 上, 右, 下)
cropped = img.crop((100, 100, 400, 400))
# 创建拼贴画布
canvas = Image.new('RGB', (800, 400), 'white')
# 粘贴图片
canvas.paste(img1, (0, 0)) # 在坐标(0, 0)处粘贴第一张图
canvas.paste(img2, (400, 0)) # 在坐标(400, 0)处粘贴第二张图
# 保存拼贴结果
canvas.save('collage.jpg')
6. 添加文字和绘图
# 创建一个画布
img = Image.new('RGB', (400, 200), color='white')
draw = ImageDraw.Draw(img)
# 加载字体(建议使用TrueType字体)
try:
font = ImageFont.truetype('arial.ttf', 36)
except:
font = ImageFont.load_default()
# 绘制文字
draw.text((50, 50), "Hello, Pillow!", fill='black', font=font)
# 绘制图形
draw.rectangle([100, 100, 200, 150], outline='red', fill='blue')
draw.ellipse([200, 100, 300, 150], outline='green', fill='yellow')
draw.line([0, 0, 400, 200], fill='red', width=3)
img.save('drawing.png')
7. 实用案例:制作表情包生成器
def create_meme(image_path, top_text, bottom_text):
# 打开图片
img = Image.open(image_path)
# 创建可以绘图的对象
draw = ImageDraw.Draw(img)
# 设置字体大小(根据图片大小调整)
font_size = int(img.width/10)
try:
font = ImageFont.truetype('arial.ttf', font_size)
except:
font = ImageFont.load_default()
# 添加顶部文字
draw.text((img.width/2, font_size),
top_text,
font=font,
fill='white',
stroke_fill='black',
stroke_width=3,
anchor='mm') # mm表示中心对齐
# 添加底部文字
draw.text((img.width/2, img.height-font_size),
bottom_text,
font=font,
fill='white',
stroke_fill='black',
stroke_width=3,
anchor='mm')
return img
# 使用示例
meme = create_meme('cat.jpg', '当代码终于跑通时', '我的表情')
meme.save('meme.jpg')
实战小练习:
-
制作一个图片批量处理工具,能同时处理一个文件夹中的所有图片
-
开发一个简单的图片水印添加器
-
尝试制作一个拼图马赛克效果
注意事项:
-
处理大量图片时要注意内存使用
-
记得及时关闭打开的图片文件
-
保存图片时注意格式和质量的选择
-
使用try-except处理可能的文件操作异常
小贴士:
-
处理大图片时,可以先resize再处理,能大大提高处理速度
-
PNG格式支持透明度,而JPEG不支持
-
图片处理很耗内存,记得及时释放不用的图片对象
小伙伴们,今天的Python学习之旅就到这里啦!记得动手敲代码,有问题随时在评论区问我哦。祝大家学习愉快,Python学习节节高!
更多请关注微信公众号SurzZ