当前位置: 首页 > article >正文

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 应用、机器学习中的图像预处理以及图像批处理等场景。


http://www.kler.cn/news/329122.html

相关文章:

  • Linux下的基本指令/命令(一)
  • PHP 语言基础教程学习笔记
  • 基于单片机汽车尾灯控制系统
  • 字符串形式返回小数
  • 新高考的五大变化‌‌(AI生成)
  • PHP反序列化6(session反序列化)
  • 确保架构与业务一致性和合规性的成功转型之路:理论与实践的全面解读
  • VR视频怎样进行加密和一机一码的使用?--加密(一)
  • Spring Boot 进阶- Spring Boot日志框架介绍
  • Python面向对象基础:属性动态添加
  • Java 编码系列:并发集合详解与面试题解析
  • C语言_字符函数和字符串函数
  • 网络原理-TCP协议
  • 使用 Docker 制作 YashanDB 镜像:深度解析与实战指南
  • 优秀博客:小程序通信方法在 Vue 3 中的对应技术
  • 分页查询前后端代码
  • 怎么在FTP服务器上配置SSL/TLS?
  • Python知识点:如何使用Spark与PySpark进行分布式数据处理
  • Linux——K8s pod调度
  • 用 API 实现 AI 视频摘要:动手制作属于你的 AI 视频小助手
  • docker的harbor仓库登录问题
  • Linux设备上cifx板卡作为ethercat从站的调试记录
  • 【Android 13源码分析】Activity生命周期之onCreate,onStart,onResume-1
  • 计算机网络:计算机网络概述 —— 初识计算机网络
  • 盒子是什么? -- 第四课
  • Meta推出Llama 3.2 AI模型,支持多模态和边缘计算;OpenAI首席技术官穆拉蒂宣布离职
  • 数据链路层 ——MAC
  • 设计模式——责任链模式
  • 螺狮壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习03(网络及IP规划)
  • AI 对话工具汇总