Pillow:Python图像处理的魔法宝盒。

大家好呀!今天我要和大家分享一个超级有趣的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')

实战小练习:

  1. 制作一个图片批量处理工具,能同时处理一个文件夹中的所有图片

  2. 开发一个简单的图片水印添加器

  3. 尝试制作一个拼图马赛克效果

注意事项:

  • 处理大量图片时要注意内存使用

  • 记得及时关闭打开的图片文件

  • 保存图片时注意格式和质量的选择

  • 使用try-except处理可能的文件操作异常

小贴士:

  1. 处理大图片时,可以先resize再处理,能大大提高处理速度

  2. PNG格式支持透明度,而JPEG不支持

  3. 图片处理很耗内存,记得及时释放不用的图片对象

小伙伴们,今天的Python学习之旅就到这里啦!记得动手敲代码,有问题随时在评论区问我哦。祝大家学习愉快,Python学习节节高!

更多请关注微信公众号SurzZ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值