Python 课程22-Pillow

前言

Pillow 是一个 Python 图像处理库,是 Python Imaging Library (PIL) 的升级版。Pillow 提供了对常见图像文件格式(如 PNG、JPEG、GIF 等)的支持,并允许你进行图像裁剪、调整大小、旋转、滤镜应用、文本添加等操作。Pillow 广泛用于 Web 应用、机器学习中的图像预处理和图像批处理等场景。

本教程将展示如何使用 Pillow 处理图像文件,涵盖从基础图像操作到高级图像处理技巧。你将学会如何加载图像、编辑图像、保存处理后的图像,并应用不同的图像滤镜和效果。


目录

  1. Pillow 基础

    • 安装 Pillow
    • 加载与显示图像
    • 保存图像
    • 获取图像信息
  2. 基本图像操作

    • 调整图像大小与缩放
    • 图像旋转与翻转
    • 图像裁剪
    • 调整图像颜色(亮度、对比度)
  3. 高级图像处理

    • 应用滤镜与效果
    • 处理透明度与 Alpha 通道
    • 合并图像与图像叠加
    • 添加文字到图像
  4. 图像格式转换与批处理

    • 图像格式转换
    • 图像批处理与自动化

1. Pillow 基础

安装 Pillow

你可以通过 pip 安装 Pillow:

pip install Pillow

加载与显示图像

使用 Pillow 加载并显示图像。Image.open() 函数用于打开图像,show() 函数可以显示图像。

from PIL import Image

# 加载图像
image = Image.open('example.jpg')

# 显示图像
image.show()

保存图像

使用 save() 方法可以将图像保存为不同的格式。

# 保存图像为 PNG 格式
image.save('output.png')
获取图像信息

你可以通过 size 属性获取图像的宽度和高度,format 属性查看图像的文件格式。

# 获取图像尺寸
width, height = image.size
print(f"Image Size: {width}x{height}")

# 获取图像格式
print(f"Image Format: {image.format}")

2. 基本图像操作

调整图像大小与缩放

你可以使用 resize() 方法来调整图像的大小。可以通过设置图像的新宽高来缩放图像。

# 调整图像大小
resized_image = image.resize((200, 300))
resized_image.show()

此外,还可以使用 thumbnail() 方法缩略图,保持原图比例。

# 创建缩略图
image.thumbnail((150, 150))
image.show()

图像旋转与翻转

Pillow 提供了旋转图像和翻转图像的功能。

  • 旋转图像

    旋转 90 度

    rotated_image = image.rotate(90)
    rotated_image.show()

  • 翻转图像

    水平翻转

    flipped_image = image.transpose(Image.FLIP_LEFT_RIGHT)
    flipped_image.show()

图像裁剪

你可以使用 crop() 方法裁剪图像,传入一个 4 元素的元组 (left, upper, right, lower) 定义裁剪区域。

# 裁剪图像
cropped_image = image.crop((100, 100, 400, 400))
cropped_image.show()

调整图像颜色(亮度、对比度)

Pillow 提供了 ImageEnhance 模块来调整图像的亮度、对比度、颜色和锐度。

from PIL import ImageEnhance

# 调整图像亮度
enhancer = ImageEnhance.Brightness(image)
brightened_image = enhancer.enhance(1.5)  # 增强亮度
brightened_image.show()

# 调整图像对比度
contrast_enhancer = ImageEnhance.Contrast(image)
contrasted_image = contrast_enhancer.enhance(2.0)  # 增强对比度
contrasted_image.show()

3. 高级图像处理

应用滤镜与效果

Pillow 提供了丰富的图像滤镜,可以通过 ImageFilter 模块应用滤镜效果。

from PIL import ImageFilter

# 应用模糊滤镜
blurred_image = image.filter(ImageFilter.BLUR)
blurred_image.show()

# 应用锐化滤镜
sharpened_image = image.filter(ImageFilter.SHARPEN)
sharpened_image.show()

处理透明度与 Alpha 通道

对于带有透明通道的图像(如 PNG 格式),你可以直接操作其透明度。

  • 设置透明度

    image = image.convert("RGBA") # 转换为带 Alpha 通道的图像
    pixels = image.getdata()

    修改每个像素的 Alpha 值

    new_pixels = [(r, g, b, int(a * 0.5)) for (r, g, b, a) in pixels]
    image.putdata(new_pixels)
    image.show()

合并图像与图像叠加

你可以通过 paste() 方法将一张图像叠加到另一张图像上。

background = Image.open('background.jpg')
overlay = Image.open('overlay.png')

# 叠加 overlay 图像到背景图像的 (50, 50) 位置
background.paste(overlay, (50, 50), overlay)  # 第三个参数是 alpha 通道
background.show()

添加文字到图像

你可以使用 ImageDraw 模块在图像上添加文本。

from PIL import ImageDraw, ImageFont

# 创建绘图对象
draw = ImageDraw.Draw(image)

# 选择字体(需要指定字体路径)
font = ImageFont.truetype("arial.ttf", 40)

# 在图像上添加文字
draw.text((50, 50), "Hello, Pillow!", fill="white", font=font)
image.show()

4. 图像格式转换与批处理

图像格式转换

你可以轻松地将图像从一种格式转换为另一种格式。

# 将 JPG 图像转换为 PNG
image = Image.open('example.jpg')
image.save('output.png')

图像批处理与自动化

Pillow 可以轻松实现批处理操作,例如调整一组图像的大小、转换格式等。

import os
from PIL import Image

input_folder = "images/"
output_folder = "output_images/"

# 批量调整大小并保存为 PNG 格式
for filename in os.listdir(input_folder):
    if filename.endswith(".jpg"):
        img = Image.open(os.path.join(input_folder, filename))
        img = img.resize((800, 800))
        img.save(os.path.join(output_folder, filename.replace(".jpg", ".png")))

结论

通过本教程,你已经学习了如何使用 Pillow 处理图像文件。Pillow 提供了丰富的功能,可以帮助你高效地进行图像处理操作,从基本的图像加载、显示、保存,到高级的图像滤镜应用、透明度处理和文本叠加等功能。Pillow 是许多 Python 图像处理项目中不可或缺的工具,广泛应用于 Web 应用、机器学习中的图像预处理以及图像批处理等场景。

相关推荐
远望樱花兔13 分钟前
【d63】【Java】【力扣】141.训练计划III
java·开发语言·leetcode
过期动态14 分钟前
详解Python面向对象程序设计
开发语言·python·pycharm·django
正在敲代码中35 分钟前
成绩排序c++
开发语言·c++·算法·函数·结构体排序
兜里有糖请分享44 分钟前
Python中序列化/反序列化JSON格式的数据
爬虫·python
吃不胖的熊猫1 小时前
【LQB15_模拟】C风险对冲
c语言·开发语言
s甜甜的学习之旅1 小时前
前端js处理list(数组)
开发语言·前端·javascript
slp_1 小时前
java list使用基本操作
java·开发语言·list
萧鼎1 小时前
Python中的TensorFlow与Keras:深度学习模型构建与训练
python·深度学习·tensorflow
浪里个浪的10241 小时前
【C#】创建一个主菜单和弹出菜单系统
开发语言·c#
huaiyanchen1 小时前
C#开发流程
开发语言·数据库·c#