当前位置: 首页 > 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.xdnf.cn/news/1387549.html

相关文章:

  • LSTM实战:回归 - 实现交通流预测
  • 在Windows系统上将Java的.jar文件部署为服务
  • stylelint在项目中使用
  • 构筑沉浸式3D世界:渲染、资源与体验的协同之道
  • 牛客网 DP35 二维前缀和
  • 【算法】链表专题
  • C#连接SQL-Server数据库超详细讲解以及防SQL注入
  • 零基础json入门教程(基于vscode的json配置文件)
  • 序列化和反序列的学习
  • 医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(五)
  • Word - Word 查找文本中的特定内容
  • Redis vs Elasticsearch:核心区别深度解析
  • c++二叉搜索树
  • 在Linux的环境下安装GitLab(保姆级别)
  • Ubuntu下的压缩及解压缩
  • Llama-index学习文档
  • AI驱动万物智联:IOTE 2025深圳展呈现无线通信×智能传感×AI主控技术融合
  • 【Python办公】CSV按列去重工具
  • LangChain实战(三):深入理解Model I/O - Prompts模板
  • 聊聊Prompt Engineering (提示词工程)
  • Rust Web框架Axum学习指南之响应和异常封装
  • websocket建立连接过程
  • AI供应链优化+AI门店排班:蜜雪冰城降本20%、瑞幸提效的AI商业落地实战
  • 港科大开放世界长时域具身导航!LOVON:足式机器人开放词汇目标导航
  • LeetCode Hot 100 Python (1~10)
  • 1 分钟 Maya 动画渲染要多久?5 天还是 5 小时
  • linux系统学习(15.启动管理)
  • 第一百零二章:AI的“未来电影制片厂CEO”:多模态系统落地项目实战(完整 AI 视频创作平台)
  • 极飞科技AI智慧农业实践:3000亩棉田2人管理+产量提15%,精准灌溉与老农操作门槛引讨论
  • 组件的生命周期:`useEffect` 的威力与副作用处理