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

Python Imaging Library (PIL) 全面指南:PIL基础入门-构建简易图像编辑器

项目实践:构建简易图像编辑器

学习目标

通过本课程,学员将学习如何使用PIL(Python Imaging Library)构建一个简易的图像编辑器。我们将从图像的基本操作开始,逐步深入到图像的高级处理技术,最终完成一个功能齐全的图像编辑器。

相关知识点

  • PIL构建简易图像编辑器

学习内容

1 PIL构建简易图像编辑器

1.1 图像的基本操作

在开始构建图像编辑器之前,首先需要掌握PIL中图像的基本操作,包括打开、显示、裁剪、旋转和调整大小等。这些基本操作是构建任何图像处理应用的基础。

1.1.1 打开和显示图像

使用PIL打开和显示图像非常简单。首先,学员需要安装PIL库,可以通过pip安装Pillow,Pillow是PIL的一个活跃分支,提供了更多的功能和更好的兼容性。

%pip install pillow==11.0.0
!wget https://model-community-picture.obs.cn-north-4.myhuaweicloud.com/ascend-zone/notebook_datasets/cf80fed82efc11f0a5c1c0d193714e3c/example.jpg
from PIL import Image# 打开图像
img = Image.open('example.jpg')# 显示图像
img.show()

在这里插入图片描述
这段代码首先从PIL库中导入了Image模块,然后使用Image.open()方法打开指定路径的图像文件。最后,使用img.show()方法显示图像。

1.1.2 裁剪图像

裁剪图像可以让学员从原始图像中提取出特定的区域。这在处理图像时非常有用,例如,学员可能需要从一张大图中提取出人脸部分。

# 裁剪图像
left = 100
top = 50
right = 300
bottom = 300
cropped_img = img.crop((left, top, right, bottom))print(cropped_img.size)# # 显示图像
cropped_img.show()

在这里插入图片描述
在上述代码中,crop()方法接受一个四元组作为参数,分别表示裁剪区域的左、上、右、下边界。裁剪后的图像可以通过show()方法显示。

1.1.3 旋转和调整大小

旋转图像和调整图像大小也是常见的图像处理操作。PIL提供了简单的方法来实现这些功能。

# 旋转图像
rotated_img = img.rotate(90)
rotated_img.show()width = 300
height = 300
# 调整大小
resized_img = img.resize((width, height))
resized_img.show()

在这里插入图片描述
在这里插入图片描述
rotate()方法接受一个角度参数,表示图像旋转的角度。resize()方法接受一个二元组,表示新的宽度和高度。

1.2 图像的滤镜效果

图像滤镜可以用来改变图像的视觉效果,例如模糊、锐化、边缘检测等。PIL提供了多种内置的滤镜,可以轻松地应用到图像上。

1.2.1 应用模糊滤镜

模糊滤镜可以用来减少图像的细节,使图像看起来更加柔和。

from PIL import ImageFilter# 应用模糊滤镜
blurred_img = img.filter(ImageFilter.BLUR)
blurred_img.show()

在这里插入图片描述
filter()方法接受一个滤镜对象作为参数。ImageFilter.BLUR是一个预定义的模糊滤镜。

1.2.2 应用锐化滤镜

锐化滤镜可以增强图像的细节,使图像看起来更加清晰。
在这里插入图片描述

ImageFilter.SHARPEN是一个预定义的锐化滤镜。

1.3 图像的格式转换与保存

在处理图像时,学员可能需要将图像转换为不同的格式,或者将处理后的图像保存到文件中。PIL提供了简单的方法来实现这些功能。

1.3.1 转换图像格式

PIL支持多种图像格式,可以轻松地将图像从一种格式转换为另一种格式。

# 转换图像格式
img = img.convert('L')  # 转换为灰度图像
img.show()

在这里插入图片描述
convert()方法接受一个字符串参数,表示目标格式。例如,'L'表示灰度图像。

1.3.2 保存图像

处理完图像后,可以将图像保存到文件中,以便后续使用。

# 保存图像
img.save('output.jpg')
http://www.dtcms.com/a/356808.html

相关文章:

  • matlab利用模糊算法控制PID参数实现模糊控制
  • LabVIEW实现跨 VI 簇按钮控制功能
  • 2026届大数据毕业设计选题推荐-基于Python的出行路线规划与推荐系统 爬虫数据可视化分析
  • 如何为在线医疗问诊小程序实现音视频通话功能?
  • Spring Boot整合MyBatis Plus实现多维度数据权限控制
  • Day17_【机器学习—在线数据集 鸢尾花案例】
  • Java面试实战:Spring Boot微服务在电商场景的技术深度解析
  • Scikit-learn Python机器学习 - Scikit-learn介绍
  • Dify1.8.0更新,Docker 无法拉取镜像怎么破?
  • 【大模型13】 视觉大模型与多模态
  • 部署2.516.2版本的jenkins,同时适配jdk8
  • 【ACP】2025-最新-疑难题解析-9
  • 技术速递|新手指南:如何在 Foundry Local 中使用自定义模型
  • 趣味学Rust基础篇(控制流程)
  • 关于Libvio访问异常排查指南
  • 2025互联网大厂Java面试1000道题目及参考答案
  • openEuler系统实现MySQL数据库主从复制
  • Java 流(Stream)、文件(File)和IO
  • NSSCTF-[NISACTF 2022]string_WP
  • 第6.4节:awk语言 for 语句
  • Linux 软件编程(十四)网络编程:数据存储与 SQLite 数据库
  • (二)Python语法基础(下)
  • web端播放flv视频流demo(flv.js的使用)
  • 【C语言16天强化训练】从基础入门到进阶:Day 15
  • 量化研究--开放ptrade西蒙斯全天候ETF策略动量策略
  • 一文说清楚ABAP中的‘显示提交(Explicit Commit)’和‘隐式提交(Implicit Commit)’
  • CesiumJS 封装 - 初始化与配置
  • Ubuntu 搭建 Solana 区块链开发环境 + Anchor 智能合约完整教程
  • 2025年防窜货系统行业深度分析报告
  • 将数据赋值到Word并下载