Python图像处理库Pillow(PIL)的简单使用

图像库PIL(Python Image Library)是Python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了。PIL原来是只支持python2的版本,后来出现了移植到python3的库pillow,pillow其功能和PIL差不多。 PIL 软件包提供了基本的图像处理功能,如:改变图像大小,旋转图像,图像格式转换,色场空间转换,图像增强,直方图处理,插值和滤波等等。

Pillow 的安装非常简单,不过需要注意 Pillow 和 PIL 不能共存在相同的环境中,因此在安装 Pillow 之前,先要卸载 PIL。命令行下通过 pip 安装:

pip install pillow

安装完成之后,可以在 Python 的开发环境输入以下代码,测试 Pillow 是否安装成功,以及查看相应的版本号。

from PIL import Image

print(Image.VERSION)

注意,虽然使用的是 Pillow,但是导入的包依然是 PIL。

Image是PIL中最重要的模块之一,任何一张图片都可以使用Image对象来表示。 可以通过多种方式来创建 Image 类的实例,比如:从文件中加载图像、处理其它图像或从头开始创建图像。

要从文件中加载图像创建 Image 类的实例,可以使用 Image 模块的 open() 方法。

from PIL import Image

img = Image.open(r"./test.jpg")

执行成功, Image.open() 函数会返回一个 Image 对象。如果图像文件打开错误,则会抛出 OSError 错误。

注意在使用交互式处理图片文件时,应该使用文件的全路径,如果运行py文件,还是建议采用相对路径。

读取网络图形需要配合网络请求工具,通过网络请求工具将图片变成流然后通过Image类进行打开。

from PIL importImage
import requests

url ='https://xxxxxx.jpg'
resp = requests.get(url, stream=True).raw
img =Image.open(resp)
img.save('xxxx.jpg','jpeg')

该示例从 URL 读取图像并将其保存在磁盘上。

通过Image 类的实例可以使用实例的属性来检查文件内容。

from PIL import Image
img = Image.open(r"./test.jpg")

print(img.format)
JPEG
print(img.size)
(1080, 1920)
print(img.mode)
RGB
  • format: 返回图像文件的格式(JPG, PNG, BMP, None, etc.)。用来标识图片的格式或来源,如果图片并不是通过读取文件得到的,那么值就是None。
  • size: 返回图像的尺寸。以二元组的形式返回图像的宽度和高度(以像素为单位);
  • mode: 返回图像的色彩模式(L, RGB, CMYK, etc.)。L 为灰度图像,RGB 为真彩色图像,CMYK 为印刷图像;

Image 类实例有很多方法,如果想要查看图像,可以使用 show() 方法。

from PIL import Image
img = Image.open(r"./test.jpg")
img.show()

show() 方法效率不高,因为它会将图像保存到临时文件中,并且调用你电脑中的图像程序来显示图像。如果你的电脑中没有安装显示图像的应用程序,show() 方法甚至不能工作。

Pillow 保存一个图像 语法为:

Image.save(fp, format=None, **params)
  • fp – 文件名(字符串)、pathlib.Path对象或文件对象。
  • format – 可选的格式重写。如果省略,使用的格式是由文件名扩展名决定的。如果使用文件对象而不是文件名,应该总是使用这个参数。
  • options – 图像写入器的额外参数。
  • 返回值 – 无
  • KeyError – 如果不能从文件名确定输出格式,使用格式选项来解决这个问题。
  • IOError – 如果文件不能被写入,文件可能已经被创建,可能包含部分数据。

注意:保存的时候,如果没有指定图片格式的话,那么Pollow会根据输入的后缀名决定图片的格式。

from PIL import Image
im = Image.open(r"./test.jpg")
print(im.format)  # JPEG
from PIL import Image
im = Image.open(r"./test.jpg")
print(im.size)  # (960, 626)
from PIL import Image
im = Image.open(r"./test.jpg")
缩放为原来的1/2
im = im.resize((im.size[0] // 2, im.size[1] // 2))
from PIL import Image
im = Image.open(r"./test.jpg")
填入角度,按照逆时针进行翻转
im = im.rotate(90)
from PIL import Image
im = Image.open(r"./test.jpg")
图像模糊
im = im.filter(ImageFilter.BLUR)
from PIL import Image
im = Image.open(r"./test.jpg")
im = im.filter(ImageFilter.DETAIL)
from PIL import Image
im = Image.open(r"./test.jpg")
im = im.filter(ImageFilter.FIND_EDGES)
from PIL import Image
im = Image.open(r"./test.jpg")
im = im.filter(ImageFilter.EMBOSS)
from PIL import Image
im = Image.open(r"./test.jpg")
im = im.filter(ImageFilter.SHARPEN)

使用PIL模块的 quality方法来进行压缩

from PIL import Image

#读取img文件
img_file = './test.jpg'
im = Image.open(img_file)

#quality 是设置压缩比
im.save('pico-ouo.jpg',quality = 20)

用PIL的 thumbnail方式进行图片压缩

from PIL import Image,ImageFile

#防止图片超过178956970 pixels 而报错
ImageFile.LOAD_TRUNCATED_IMAGES = True
Image.MAX_IMAGE_PIXELS = None

#读取img文件
img_file = './test.jpg'
im = Image.open(img_file)

#获取原尺寸图片大小
w,h = im.size
#图片进行50%的压缩
im.thumbnail  = ((w // 2, h // 2))
#保存
im.save('test.jpg')

PIL的ImageDraw提供了一系列绘图方法,让我们可以直接绘图。篇幅有限,本文暂时先不做探讨。

Original: https://blog.csdn.net/unreliable_narrator/article/details/126659891
Author: PalmerYang
Title: Python图像处理库Pillow(PIL)的简单使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/729545/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 什么是BGP

    BGP概述 边界网关协议(BGP)是运行于 TCP协议上的一种自治系统的路由协议。 是一种外部路由协议。 AS概述 自治系统(AS),指的是同一个使用相同策略的设备的集合。 每个A…

    Python 2023年6月10日
    073
  • python爬取优缺点_Scrapy 的优缺点?以及如何设置深度爬取

    优点: 1)scrapy 是异步的 2)采取可读性更强的 xpath 代替正则 3)强大的统计和 log 系统 4)同时在不同的 url 上爬行 5)支持 shell 方式,方便独…

    Python 2023年10月3日
    051
  • python迭代器和生成器

    iter()用于创建迭代器,next()用于输出迭代器的下一个元素: 结果为: 创建一个迭代器需要在类中实现两个方法 iter() 与 next() ,这在python面向对象会详…

    Python 2023年11月3日
    021
  • 【吴恩达深度学习】01_week2_Python Basics with numpy (optional)

    作业链接 Python Basics with Numpy (optional assignment) Welcome to your first assignment. This…

    Python 2023年8月26日
    057
  • 上周热点回顾(10.31-11.6)

    热点随笔: · 万字泣血解析割韭菜内情,程序员别老想着做副业 (程序员济颠)· 还在用双层for循环吗?太慢了 (女友在高考)· .NET 零开销抽象指南 (hez2010)· B…

    Python 2023年10月16日
    035
  • python计算各类型电影的评分_python(15)-pandas-多类型统计-电影分类问题

    1.情境描述:用于电影分类,一个电影可以属于好几类。 按类型统计片子数。 2.实现步骤:读文件->统计分类->全0数组(行,列)->赋值为1->各列求和 3…

    Python 2023年8月7日
    056
  • 逆向爬虫15 Scrapy基本介绍与使用

    逆向爬虫15 Scrapy基本介绍与使用 一、什么是Scrapy? Scrapy到目前为止依然是这个星球上最流行的 爬虫&#x6…

    Python 2023年10月3日
    051
  • python微信机器人制作教程+源码

    一、环境配置 大多数人无法登录网页版,所以饶过它模拟电脑登录,这个模块一定记得安装: pip install itchat-uos pip install itchat ⚠️ 演示…

    Python 2023年8月2日
    051
  • centeros系统之上传下载文件

    安装lrzszlrzsz这个软件,可以让我们直接从linux上,下载和上传文件的操作 yum install -y lrzsz11、上传文件通过输入 rz命令,可以弹出上传文件的对…

    Python 2023年6月16日
    070
  • 人工智能 —— 知识图谱

    引言 初学者刚开始学习人工智能时,面对铺天盖地的概念,如,人工智能、机器学习、深度学习、计算机视觉等等,一时间可能就被这些”高深”的名称给唬住了,不知道如何…

    Python 2023年9月30日
    033
  • scrapy 框架的认识(1)

    scrapy框架介绍: scrapy 框架是一个爬虫框架,是为了提高爬虫效率开发的框架。可以通过redis数据库实现分布式爬虫,(分布式爬虫是将爬虫程序url分布到其他电脑进行爬虫…

    Python 2023年10月5日
    054
  • 【机器学习】李宏毅——Adversarial Attack(对抗攻击)

    研究这个方向的动机,是因为在将神经网络模型应用于实际场景时,它仅仅拥有较高的正确率是不够的,例如在异常检测中、垃圾邮件分类等等场景,那些负类样本也会想尽办法来”欺骗&#…

    Python 2023年10月28日
    037
  • python之json库

    JSON是用于存储和交换数据的语法,是一种轻量级的数据交换格式。经常用于接口数据传输、序列化、配置文件等json的形式有2种:键值对形式、数组形式 json的数据形式与python…

    Python 2023年8月2日
    041
  • 初识Django框架

    文章目录 初识Django框架 * python三大主流web框架介绍 Django框架介绍 Django基本操作 – 创建一个django项目 应用解释 主要文件介绍…

    Python 2023年8月4日
    059
  • 今天面了个阿里拿 38K 出来的,让我见识到了基础的天花板

    前言 人人都有大厂梦,对于程序员来说,BAT 为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀…

    Python 2023年10月27日
    038
  • 【数据分析】Python数据分析之回归分析

    回归分析 回归分析的核心在于确定变量之间存在着的 函数关系 各个变量之间可以分为确定关系和非确定关系(相对关系),我们要做的就是对这种关系进行 建模和解释。 其主要流程可以解释如下…

    Python 2023年8月2日
    043
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球