Pillow图片处理教程:Python实用技巧
偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《Python使用Pillow处理图片教程》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!
Pillow是Python中处理图片的首选库,提供直观API,支持打开、编辑、保存等操作,适用于调整尺寸、裁剪、旋转、滤镜应用等常见任务。安装简单,通过pip install Pillow即可完成。核心模块为Image,常用功能包括:1. 打开并显示图片,支持格式、尺寸、模式查询及错误处理;2. 调整尺寸,resize可指定大小,thumbnail保持比例生成缩略图更智能;3. 裁剪图片,通过box参数定义区域;4. 旋转与翻转,rotate支持扩展画布,transpose实现左右或上下翻转;5. 格式与模式转换,如转灰度图(convert("L"))或保存为PNG;6. 应用滤镜,如高斯模糊、锐化等。相比OpenCV,Pillow侧重通用图像处理和文件操作,适合Web应用、批量处理、数据预处理等场景;而OpenCV专精计算机视觉任务,适用于复杂算法和高性能需求。两者可结合使用,Pillow负责IO和基础处理,OpenCV处理高级分析。处理大图时需注意内存占用,优化技巧包括使用thumbnail、分块处理、选择合适格式(如WebP)、避免冗余对象。实际应用广泛,涵盖用户头像处理、图片压缩、动态生成验证码、数据增强、自动化报表、数字艺术等领域

Pillow库是Python生态中处理图片的首选工具,它提供了直观且强大的API,能够轻松完成从图片打开、编辑到保存的各种基本操作,无论是调整尺寸、裁剪、旋转,还是简单的滤镜应用,Pillow都能高效应对。
解决方案
要使用Pillow库处理图片,首先得确保它已经安装在你的Python环境中。通常,一个简单的pip install Pillow就能搞定。我个人觉得,这个库的安装过程算是Python生态里最省心的之一了。
一旦安装完成,我们就可以开始图片处理之旅。Pillow的核心是Image模块,几乎所有的操作都围绕着Image.open()打开的图片对象进行。
1. 打开并显示图片 打开图片就像翻开一本画册。
from PIL import Image
try:
img = Image.open("example.jpg")
print(f"图片格式: {img.format}, 尺寸: {img.size}, 模式: {img.mode}")
# img.show() # 这会调用系统默认的图片查看器显示图片
except FileNotFoundError:
print("图片文件未找到,请确保'example.jpg'存在。")
except Exception as e:
print(f"打开图片时发生错误: {e}")这里我特意加了错误处理,因为实际工作中文件路径问题是常客。img.show()在开发调试时非常方便,能直接看到效果。
2. 调整图片尺寸 调整尺寸是图片处理中最常见的需求了,比如为网页生成缩略图,或者统一图片大小。
from PIL import Image
img = Image.open("example.jpg")
new_size = (128, 128) # 宽128,高128
resized_img = img.resize(new_size)
resized_img.save("example_resized.jpg")
print(f"图片已调整为 {new_size} 并保存为 example_resized.jpg")
# 另一种更智能的缩放方式,保持比例,常用于生成缩略图
img.thumbnail((200, 200)) # 会原地修改img对象,使其最大边不超过200
img.save("example_thumbnail.jpg")
print("图片已生成缩略图并保存为 example_thumbnail.jpg")resize是直接指定新尺寸,可能会导致图片变形;而thumbnail则会保持图片比例,将图片缩小到指定尺寸范围内,这在制作头像或产品缩略图时非常实用,我个人更偏爱thumbnail,因为它更“智能”。
3. 裁剪图片 有时候我们只需要图片的一部分,裁剪就派上用场了。
from PIL import Image
img = Image.open("example.jpg")
# 定义裁剪区域:(左上角x, 左上角y, 右下角x, 右下角y)
box = (100, 100, 400, 400)
cropped_img = img.crop(box)
cropped_img.save("example_cropped.jpg")
print(f"图片已裁剪区域 {box} 并保存为 example_cropped.jpg")裁剪区域的坐标定义是Pillow的一个小细节,习惯了就好。
4. 旋转图片 图片方向不对?旋转一下就好。
from PIL import Image
img = Image.open("example.jpg")
rotated_img = img.rotate(90, expand=True) # 顺时针旋转90度,expand=True会扩展画布以适应新尺寸
rotated_img.save("example_rotated_90.jpg")
print("图片已顺时针旋转90度并保存为 example_rotated_90.jpg")
# 也可以进行翻转操作
flipped_lr_img = img.transpose(Image.FLIP_LEFT_RIGHT) # 左右翻转
flipped_lr_img.save("example_flipped_lr.jpg")
print("图片已左右翻转并保存为 example_flipped_lr.jpg")expand=True是个很贴心的参数,它能确保旋转后图片内容不会被裁切,画布会自动调整大小。
5. 转换图片格式和模式 Pillow支持多种图片格式和色彩模式转换。
from PIL import Image
img = Image.open("example.jpg")
# 转换为灰度图
grayscale_img = img.convert("L") # "L"代表灰度模式
grayscale_img.save("example_grayscale.jpg")
print("图片已转换为灰度图并保存为 example_grayscale.jpg")
# 转换为PNG格式
img.save("example.png")
print("图片已转换为PNG格式并保存为 example.png")我经常用convert("L")来处理一些不需要色彩信息的图像,比如用于机器学习的预处理,能有效减小数据量。
6. 应用简单滤镜 Pillow也提供了一些基础的图像增强和滤镜功能。
from PIL import Image, ImageFilter
img = Image.open("example.jpg")
# 应用高斯模糊
blurred_img = img.filter(ImageFilter.GaussianBlur(radius=5))
blurred_img.save("example_blurred.jpg")
print("图片已应用高斯模糊并保存为 example_blurred.jpg")
# 锐化图片
sharpened_img = img.filter(ImageFilter.SHARPEN)
sharpened_img.save("example_sharpened.jpg")
print("图片已锐化并保存为 example_sharpened.jpg")这些滤镜操作虽然简单,但在很多场景下已经足够用,比如给用户上传的图片加个模糊效果保护隐私。
Pillow库与OpenCV等其他图像处理库有何不同?我该如何选择?
聊完Pillow的基础操作,可能有人会好奇,Python里处理图片的库那么多,比如OpenCV,它们之间有什么区别?我该怎么选呢?这其实是个很实际的问题,我在做项目时也经常遇到。
简单来说,Pillow更侧重于通用图像处理和文件操作。它的API设计非常直观,处理图片格式转换、尺寸调整、裁剪、简单的滤镜、文本水印等日常任务简直是信手拈来。如果你在开发一个Web应用,需要处理用户上传的头像、商品图片,或者做一些图片批量处理、生成缩略图、加水印之类的活儿,Pillow无疑是你的首选。它轻量、易学,并且功能足够强大,足以应对大部分非计算机视觉领域的图像处理需求。我个人觉得,Pillow的哲学是“把简单的事情做好,并且让它变得更简单”。
而OpenCV(Open Source Computer Vision Library),顾名思义,它是一个专门为计算机视觉任务设计的库。它的核心优势在于强大的图像分析、识别、处理算法,比如人脸识别、物体检测、图像特征提取、视频流处理、高级滤波等等。OpenCV通常处理的是NumPy数组形式的图像数据,这让它在科学计算和机器学习领域拥有极高的性能和灵活性。如果你在做图像识别、自动驾驶、医学影像分析、视频监控等需要复杂算法和高性能计算的项目,那么OpenCV才是你的不二之选。它的学习曲线相对陡峭一些,但能解决的问题也更深奥。
如何选择? 我的建议是:
- 日常图片处理、Web应用、数据预处理(非深度学习特征提取类)、简单的图像生成与编辑:选Pillow。它能让你快速上手,高效完成任务。
- 计算机视觉、机器学习、高性能图像分析、视频处理、复杂算法实现:选OpenCV。它提供了更底层、更专业的工具集。
- 两者结合:这其实是我在实际项目中经常采用的策略。比如,Pillow负责图片的IO(打开、保存、格式转换),以及一些简单的尺寸调整和裁剪;而OpenCV则负责更复杂的图像算法处理。这样可以充分发挥各自的优势。
处理大尺寸图片时,Pillow库的性能表现如何?有哪些优化技巧?
处理大尺寸图片,Pillow虽然能搞定,但你确实得留意内存消耗和处理速度。我记得有一次处理几百兆甚至上G的图片,如果不加思索地直接操作,内存占用飙升,甚至会导致程序崩溃。Pillow在打开图片时,默认会将整个图片数据加载到内存中,这对于动辄几千万像素的图片来说,是个不小的开销。
性能表现:
- 内存占用大:如前所述,大图片会占用大量内存。
- 处理速度:对于CPU密集型操作(如复杂的滤镜),处理时间会随着图片尺寸的增大而显著增加。
优化技巧:
- 分块处理(非Pillow原生,但可以实现):Pillow本身没有直接的分块处理API,但如果你需要处理超大图片(比如GIS影像),可以考虑先将大图切割成小块,然后Pillow逐块处理,最后再拼接起来。不过,这种场景下,可能需要更专业的库如GDAL。
- 利用
thumbnail()方法生成缩略图:如果你的目标只是生成一个较小的预览图,img.thumbnail((width, height))是效率最高的选择。它会原地修改图片对象,并确保在保持比例的前提下,将图片缩小到指定尺寸范围内,且通常比resize更节省内存。 - 合理选择图片格式:
- JPEG:对于照片类图像,压缩率高,文件小,但有损。保存时可以调整
quality参数(0-95,默认75),适当降低质量可以显著减小文件大小。 - PNG:无损压缩,适合图标、带透明度的图像。文件通常比JPEG大。
- WebP:一种现代的图片格式,在相同质量下通常比JPEG和PNG文件更小,Pillow也支持。
- 在保存时,明确指定格式和相关参数,比如
img.save("output.jpg", quality=85, optimize=True)。optimize=True可以进一步优化JPEG文件大小。
- JPEG:对于照片类图像,压缩率高,文件小,但有损。保存时可以调整
- 避免不必要的中间图片对象:链式操作时,Pillow会创建新的图片对象。如果内存紧张,尽量在一个对象上完成多步操作,或者及时释放不再需要的图片对象(虽然Python的垃圾回收机制通常能处理好)。
- 考虑使用
LAZY模式(虽然不常用):Pillow的Image.open()默认是LAZY模式,即它只读取文件头信息,真正像素数据是在第一次访问时才加载。但一旦加载,就会全部载入。对于超大图片,如果只是想获取尺寸信息,不进行实际像素操作,这个特性可以避免不必要的内存加载。 - 硬件加速(有限):Pillow本身是纯Python实现的,但底层依赖的C库(如libjpeg, libtiff等)可能利用了SIMD指令集等进行优化。对于CPU密集型任务,升级更快的CPU会有帮助。但Pillow本身不直接支持GPU加速。
总之,对于大尺寸图片,关键在于减少不必要的内存加载和计算。明确你的最终需求,选择最合适的处理路径和保存格式,能有效缓解性能瓶颈。
Pillow库在实际项目中常见的应用场景有哪些?
Pillow库之所以成为Python图片处理的“瑞士军刀”,离不开它在各种实际项目中的广泛应用。我个人在不同的项目中,几乎都或多或少地用到过Pillow,它的灵活性和易用性让很多工作变得简单。
Web应用中的图片处理
- 用户头像/上传图片处理:这是最常见的场景。用户上传的图片可能尺寸不一、方向错误。Pillow可以自动调整尺寸、裁剪成正方形、旋转纠正方向,甚至添加水印。比如,我曾用Pillow为用户上传的个人资料图片生成不同尺寸的缩略图,以适应移动端和PC端的显示需求。
- 图片压缩与格式转换:为了加快网页加载速度,Pillow可以将用户上传的大尺寸图片压缩,或转换为更适合Web的格式(如WebP),同时保持可接受的视觉质量。
- 动态生成图片:比如验证码图片、海报、带有用户信息的分享图片等。Pillow可以绘制文本、图形,并将它们叠加到背景图上。
数据科学与机器学习
- 数据增强(Data Augmentation):在训练图像识别模型时,为了增加数据集的多样性,Pillow可以对图片进行随机旋转、翻转、裁剪、调整亮度/对比度等操作,有效防止模型过拟合。
- 图像预处理:将图片统一尺寸、转换为灰度图、归一化像素值等,为模型输入做准备。
- 结果可视化:将模型输出的特征图、分割掩码等可视化为图片。
自动化办公与报表生成
- 批量图片处理:如果你有成千上万张图片需要统一处理(如添加公司Logo、调整分辨率、重命名),Pillow结合文件系统操作,可以编写脚本批量自动化完成。
- 生成PDF或文档中的图片:在自动化生成报告或文档时,Pillow可以处理图片,确保它们以正确的尺寸和格式嵌入到最终的输出文件中。
数字媒体与艺术创作
- 简单的图像编辑工具:虽然不如Photoshop专业,但Pillow可以作为后端处理引擎,实现一些基础的图像编辑功能,比如批量加滤镜、调整色彩。
- 像素艺术与图像分析:处理像素级别的数据,进行一些创意性的图像生成或分析。
物联网与嵌入式设备
- 在一些资源受限的设备上,Pillow的轻量级特性使其成为处理摄像头捕获图像的理想选择,例如对图像进行简单的裁剪、缩放后传输。
总而言之,Pillow的价值在于它提供了一个易于使用且功能完善的图片处理接口,能够满足绝大多数非专业计算机视觉领域的图像处理需求。它就像一个多面手,在各种项目中都能找到自己的用武之地。
以上就是《Pillow图片处理教程:Python实用技巧》的详细内容,更多关于的资料请关注golang学习网公众号!
Roberts算子原理及Python实现方法
- 上一篇
- Roberts算子原理及Python实现方法
- 下一篇
- 向日葵远程控制实用技巧分享
-
- 文章 · python教程 | 4分钟前 |
- MacPython兼容LibreSSL的解决方法
- 324浏览 收藏
-
- 文章 · python教程 | 37分钟前 |
- OdooQWeb浮点转整数技巧
- 429浏览 收藏
-
- 文章 · python教程 | 52分钟前 |
- VSCodePython开发全流程详解
- 348浏览 收藏
-
- 文章 · python教程 | 55分钟前 | 模块 包 代码复用 import Python函数模块化
- Python函数模块化技巧与实践解析
- 391浏览 收藏
-
- 文章 · python教程 | 1小时前 | Flask web开发
- Flask框架入门教程:Web开发实战指南
- 324浏览 收藏
-
- 文章 · python教程 | 1小时前 |
- Mako模板使用方法与实例详解
- 292浏览 收藏
-
- 文章 · python教程 | 1小时前 |
- Pythonpdb调试方法详解
- 109浏览 收藏
-
- 文章 · python教程 | 1小时前 |
- Pyodide集成BasthonTurtle教程与SVG渲染详解
- 447浏览 收藏
-
- 文章 · python教程 | 1小时前 |
- Pythontkinter添加控件技巧分享
- 148浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3176次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3388次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3417次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4522次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3796次使用
-
- Flask框架安装技巧:让你的开发更高效
- 2024-01-03 501浏览
-
- Django框架中的并发处理技巧
- 2024-01-22 501浏览
-
- 提升Python包下载速度的方法——正确配置pip的国内源
- 2024-01-17 501浏览
-
- Python与C++:哪个编程语言更适合初学者?
- 2024-03-25 501浏览
-
- 品牌建设技巧
- 2024-04-06 501浏览

