python如何使用pillow库处理图片_python pillow图像处理库的基本操作

尼克
发布: 2025-09-21 21:52:01
原创
397人浏览过
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)、避免冗余对象。实际应用广泛,涵盖用户头像处理、图片压缩、动态生成验证码、数据增强、自动化报表、数字艺术等领域

python如何使用pillow库处理图片_python pillow图像处理库的基本操作

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()
登录后复制
在开发调试时非常方便,能直接看到效果。

立即学习Python免费学习笔记(深入)”;

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才是你的不二之选。它的学习曲线相对陡峭一些,但能解决的问题也更深奥。

图酷AI
图酷AI

下载即用!可以免费使用的AI图像处理工具,致力于为用户提供最先进的AI图像处理技术,让图像编辑变得简单高效。

图酷AI57
查看详情 图酷AI

如何选择? 我的建议是:

  • 日常图片处理、Web应用、数据预处理(非深度学习特征提取类)、简单的图像生成与编辑:选Pillow。它能让你快速上手,高效完成任务。
  • 计算机视觉、机器学习、高性能图像分析、视频处理、复杂算法实现:选OpenCV。它提供了更底层、更专业的工具集。
  • 两者结合:这其实是我在实际项目中经常采用的策略。比如,Pillow负责图片的IO(打开、保存、格式转换),以及一些简单的尺寸调整和裁剪;而OpenCV则负责更复杂的图像算法处理。这样可以充分发挥各自的优势。

处理大尺寸图片时,Pillow库的性能表现如何?有哪些优化技巧?

处理大尺寸图片,Pillow虽然能搞定,但你确实得留意内存消耗和处理速度。我记得有一次处理几百兆甚至上G的图片,如果不加思索地直接操作,内存占用飙升,甚至会导致程序崩溃。Pillow在打开图片时,默认会将整个图片数据加载到内存中,这对于动辄几千万像素的图片来说,是个不小的开销。

性能表现:

  • 内存占用大:如前所述,大图片会占用大量内存。
  • 处理速度:对于CPU密集型操作(如复杂的滤镜),处理时间会随着图片尺寸的增大而显著增加。

优化技巧:

  1. 分块处理(非Pillow原生,但可以实现):Pillow本身没有直接的分块处理API,但如果你需要处理超大图片(比如GIS影像),可以考虑先将大图切割成小块,然后Pillow逐块处理,最后再拼接起来。不过,这种场景下,可能需要更专业的库如GDAL。
  2. 利用
    thumbnail()
    登录后复制
    方法生成缩略图
    :如果你的目标只是生成一个较小的预览图,
    img.thumbnail((width, height))
    登录后复制
    是效率最高的选择。它会原地修改图片对象,并确保在保持比例的前提下,将图片缩小到指定尺寸范围内,且通常比
    resize
    登录后复制
    更节省内存。
  3. 合理选择图片格式
    • JPEG:对于照片类图像,压缩率高,文件小,但有损。保存时可以调整
      quality
      登录后复制
      参数(0-95,默认75),适当降低质量可以显著减小文件大小。
    • PNG:无损压缩,适合图标、带透明度的图像。文件通常比JPEG大。
    • WebP:一种现代的图片格式,在相同质量下通常比JPEG和PNG文件更小,Pillow也支持。
    • 在保存时,明确指定格式和相关参数,比如
      img.save("output.jpg", quality=85, optimize=True)
      登录后复制
      optimize=True
      登录后复制
      可以进一步优化JPEG文件大小。
  4. 避免不必要的中间图片对象:链式操作时,Pillow会创建新的图片对象。如果内存紧张,尽量在一个对象上完成多步操作,或者及时释放不再需要的图片对象(虽然Python的垃圾回收机制通常能处理好)。
  5. 考虑使用
    LAZY
    登录后复制
    模式(虽然不常用)
    :Pillow的
    Image.open()
    登录后复制
    默认是
    LAZY
    登录后复制
    模式,即它只读取文件头信息,真正像素数据是在第一次访问时才加载。但一旦加载,就会全部载入。对于超大图片,如果只是想获取尺寸信息,不进行实际像素操作,这个特性可以避免不必要的内存加载。
  6. 硬件加速(有限):Pillow本身是纯Python实现的,但底层依赖的C库(如libjpeg, libtiff等)可能利用了SIMD指令集等进行优化。对于CPU密集型任务,升级更快的CPU会有帮助。但Pillow本身不直接支持GPU加速。

总之,对于大尺寸图片,关键在于减少不必要的内存加载和计算。明确你的最终需求,选择最合适的处理路径和保存格式,能有效缓解性能瓶颈

Pillow库在实际项目中常见的应用场景有哪些?

Pillow库之所以成为Python图片处理的“瑞士军刀”,离不开它在各种实际项目中的广泛应用。我个人在不同的项目中,几乎都或多或少地用到过Pillow,它的灵活性和易用性让很多工作变得简单。

  1. Web应用中的图片处理

    • 用户头像/上传图片处理:这是最常见的场景。用户上传的图片可能尺寸不一、方向错误。Pillow可以自动调整尺寸、裁剪成正方形、旋转纠正方向,甚至添加水印。比如,我曾用Pillow为用户上传的个人资料图片生成不同尺寸的缩略图,以适应移动端和PC端的显示需求。
    • 图片压缩与格式转换:为了加快网页加载速度,Pillow可以将用户上传的大尺寸图片压缩,或转换为更适合Web的格式(如WebP),同时保持可接受的视觉质量。
    • 动态生成图片:比如验证码图片、海报、带有用户信息的分享图片等。Pillow可以绘制文本、图形,并将它们叠加到背景图上。
  2. 数据科学与机器学习

    • 数据增强(Data Augmentation):在训练图像识别模型时,为了增加数据集的多样性,Pillow可以对图片进行随机旋转、翻转、裁剪、调整亮度/对比度等操作,有效防止模型过拟合。
    • 图像预处理:将图片统一尺寸、转换为灰度图、归一化像素值等,为模型输入做准备。
    • 结果可视化:将模型输出的特征图、分割掩码等可视化为图片。
  3. 自动化办公与报表生成

    • 批量图片处理:如果你有成千上万张图片需要统一处理(如添加公司Logo、调整分辨率、重命名),Pillow结合文件系统操作,可以编写脚本批量自动化完成。
    • 生成PDF或文档中的图片:在自动化生成报告或文档时,Pillow可以处理图片,确保它们以正确的尺寸和格式嵌入到最终的输出文件中。
  4. 数字媒体与艺术创作

    • 简单的图像编辑工具:虽然不如Photoshop专业,但Pillow可以作为后端处理引擎,实现一些基础的图像编辑功能,比如批量加滤镜、调整色彩。
    • 像素艺术与图像分析:处理像素级别的数据,进行一些创意性的图像生成或分析。
  5. 物联网与嵌入式设备

    • 在一些资源受限的设备上,Pillow的轻量级特性使其成为处理摄像头捕获图像的理想选择,例如对图像进行简单的裁剪、缩放后传输。

总而言之,Pillow的价值在于它提供了一个易于使用且功能完善的图片处理接口,能够满足绝大多数非专业计算机视觉领域的图像处理需求。它就像一个多面手,在各种项目中都能找到自己的用武之地。

以上就是python如何使用pillow库处理图片_python pillow图像处理库的基本操作的详细内容,更多请关注php中文网其它相关文章!

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号