Pillow:图像处理魔法师,让照片焕发新生!

文摘   2024-12-01 00:08   河南  

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((800600))

# 按比例缩放
width, height = img.size
new_width = 800
new_height = int(height * (new_width / width))
proportional_img = img.resize((new_width, new_height))

# 生成缩略图
thumb_size = (128128)
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=(400300))
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=(255255255128))
    
    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')

练习题

  1. 尝试创建一个图片处理工具,能同时支持调整大小、添加水印和应用滤镜
  2. 实现一个自动生成社交媒体封面的程序(不同平台的图片尺寸不同)
  3. 制作一个简单的图片批处理程序,能够批量处理文件夹中的图片

今天的Python学习之旅就到这里啦!记得动手敲代码,用学到的知识处理你的照片。你可以从简单的调整大小开始,慢慢尝试更复杂的效果。祝大家学习愉快,Python学习节节高!


水晶的世界观
所有的努力,都将转化为成果。
 最新文章