Pillow:图像处理魔法师,让照片焕发新生!
大家好!今天我要和大家分享Python中最强大的图像处理库 - Pillow(PIL的继承者)。无论是调整图片大小、添加滤镜、制作缩略图,还是给图片加水印,Pillow都能轻松搞定。它就像一个随身携带的图像编辑器,让我们能用简单的Python代码完成各种图片处理任务。让我们一起来探索这个图像处理的魔法世界吧!
1. 安装和基础操作
首先,让我们安装Pillow并了解基本操作:
# 安装Pillow
# pip install Pillow
from PIL import Image
# 打开图片
img = Image.open('example.jpg')
# 查看图片信息
print(f"图片大小: {img.size}")
print(f"图片模式: {img.mode}")
print(f"图片格式: {img.format}")
# 显示图片
img.show()
小贴士:Pillow支持多种图片格式,包括JPG、PNG、BMP、GIF等,但不同格式之间转换时要注意是否支持透明通道。
2. 图片尺寸调整
调整图片大小是最常见的需求之一:
from PIL import Image
# 打开原图
img = Image.open('example.jpg')
# 按指定尺寸调整
resized_img = img.resize((800, 600))
# 按比例缩放
width, height = img.size
new_width = 800
new_height = int(height * (new_width / width))
proportional_img = img.resize((new_width, new_height))
# 生成缩略图
thumb_size = (128, 128)
img.thumbnail(thumb_size) # 这个方法会直接修改原图对象
# 保存结果
resized_img.save('resized.jpg')
proportional_img.save('proportional.jpg')
img.save('thumbnail.jpg')
3. 图片滤镜和增强
Pillow提供了丰富的滤镜效果和图片增强功能:
from PIL import Image, ImageEnhance, ImageFilter
# 打开图片
img = Image.open('example.jpg')
# 应用模糊滤镜
blurred = img.filter(ImageFilter.BLUR)
# 调整亮度
enhancer = ImageEnhance.Brightness(img)
brightened = enhancer.enhance(1.5) # 1.5表示提高50%亮度
# 调整对比度
enhancer = ImageEnhance.Contrast(img)
contrasted = enhancer.enhance(1.2) # 1.2表示提高20%对比度
# 调整饱和度
enhancer = ImageEnhance.Color(img)
saturated = enhancer.enhance(1.3) # 1.3表示提高30%饱和度
# 锐化
enhancer = ImageEnhance.Sharpness(img)
sharpened = enhancer.enhance(2.0) # 2.0表示锐化程度加倍
# 保存结果
blurred.save('blurred.jpg')
brightened.save('bright.jpg')
contrasted.save('contrast.jpg')
saturated.save('saturated.jpg')
sharpened.save('sharp.jpg')
4. 图片剪裁和拼接
来看看如何剪裁和拼接图片:
from PIL import Image
def create_collage(images, cols, size):
# 计算行数
rows = len(images) // cols + (1 if len(images) % cols else 0)
# 创建空白画布
collage = Image.new('RGB', (cols * size[0], rows * size[1]))
# 粘贴图片
for idx, img in enumerate(images):
# 调整每张图片大小
img = Image.open(img).resize(size)
# 计算位置
x = (idx % cols) * size[0]
y = (idx // cols) * size[1]
# 粘贴到画布上
collage.paste(img, (x, y))
return collage
# 使用示例
image_files = ['img1.jpg', 'img2.jpg', 'img3.jpg', 'img4.jpg']
collage = create_collage(image_files, cols=2, size=(400, 300))
collage.save('collage.jpg')
5. 添加水印
保护图片版权,给图片添加水印:
from PIL import Image, ImageDraw, ImageFont
def add_watermark(image_path, text):
# 打开图片
img = Image.open(image_path)
# 创建Draw对象
draw = ImageDraw.Draw(img)
# 加载字体(需要系统中有该字体)
font = ImageFont.truetype('arial.ttf', 36)
# 计算文字位置(右下角)
text_width = draw.textlength(text, font=font)
x = img.width - text_width - 10
y = img.height - 50
# 添加文字水印
draw.text((x, y), text, font=font, fill=(255, 255, 255, 128))
return img
# 使用示例
watermarked = add_watermark('example.jpg', '© 2024 MyPhoto')
watermarked.save('watermarked.jpg')
小贴士:添加水印时,建议使用半透明效果(通过fill参数的alpha值控制),这样可以让水印不会过于喧宾夺主。
6. 图片特效
来创建一些有趣的特效:
from PIL import Image, ImageOps
# 打开图片
img = Image.open('example.jpg')
# 创建黑白效果
bw_img = ImageOps.grayscale(img)
# 创建复古效果
sepia = ImageOps.colorize(bw_img, "#704214", "#C0C080")
# 创建镜像效果
mirror = ImageOps.mirror(img)
# 创建反色效果
inverted = ImageOps.invert(img)
# 保存结果
bw_img.save('blackwhite.jpg')
sepia.save('sepia.jpg')
mirror.save('mirror.jpg')
inverted.save('inverted.jpg')
练习题:
尝试创建一个图片处理工具,能同时支持调整大小、添加水印和应用滤镜 实现一个自动生成社交媒体封面的程序(不同平台的图片尺寸不同) 制作一个简单的图片批处理程序,能够批量处理文件夹中的图片
今天的Python学习之旅就到这里啦!记得动手敲代码,用学到的知识处理你的照片。你可以从简单的调整大小开始,慢慢尝试更复杂的效果。祝大家学习愉快,Python学习节节高!