Python图像处理库:Pillow 初级教程
admin
2023-07-31 00:47:35
0

Pillow由PIL而来,所以该导入该库使用import PIL

本文相关的代码:https://github.com/445141126/pillow_example

Image类

Pillow中最重要的类就是Image,该类存在于同名的模块中。可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接创建一个图片。

使用Image模块中的open函数打开一张图片:

123 >>> from PIL import Image>>> im = Image.open(\”lena.ppm\”) 

如果打开成功,返回一个Image对象,可以通过对象属性检查文件内容

1234 >>> from __future__ import print_function>>> print(im.format, im.size, im.mode)PPM (512, 512) RGB 

format属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None;size属性是一个tuple,表示图像的宽和高(单位为像素);mode属性为表示图像的模式,常用的模式为:L为灰度图,RGB为真彩色,CMYK为pre-press图像。

如果文件不能打开,则抛出IOError异常。

当有一个Image对象时,可以用Image类的各个方法进行处理和操作图像,例如显示图片:

12 >>> im.show() 

ps:标准版本的show()方法不是很有效率,因为它先将图像保存为一个临时文件,然后使用xv进行显示。如果没有安装xv,该函数甚至不能工作。但是该方法非常便于debug和test。(windows中应该调用默认图片查看器打开)

读写图片

Pillow库支持相当多的图片格式。直接使用Image模块中的open()函数读取图片,而不必先处理图片的格式,Pillow库自动根据文件决定格式。

Image模块中的save()函数可以保存图片,除非你指定文件格式,那么文件名中的扩展名用来指定文件格式。

图片转成jpg格式

12345678910111213 from __future__ import print_functionimport os, sysfrom PIL import Image for infile in sys.argv[1:]:    f, e = os.path.splitext(infile)    outfile = f + \”.jpg\”    if infile != outfile:        try:            Image.open(infile).save(outfile)        except IOError:            print(\”cannot convert\”, infile) 

save函数的第二个参数可以用来指定图片格式,如果文件名中没有给出一个标准的图像格式,那么第二个参数是必须的。

创建缩略图

12345678910111213141516 from __future__ import print_functionimport os, sysfrom PIL import Image size = (128, 128) for infile in sys.argv[1:]:    outfile = os.path.splitext(infile)[0] + \”.thumbnail\”    if infile != outfile:        try:            im = Image.open(infile)            im.thumbnail(size)            im.save(outfile, \”JPEG\”)        except IOError:            print(\”cannot create thumbnail for\”, infile) 

必须指出的是除非必须,Pillow不会解码或raster数据。当你打开一个文件,Pillow通过文件头确定文件格式,大小,mode等数据,余下数据直到需要时才处理。

这意味着打开文件非常快,与文件大小和压缩格式无关。下面的程序用来快速确定图片属性:

确定图片属性

1234567891011 from __future__ import print_functionimport sysfrom PIL import Image for infile in sys.argv[1:]f6550967284-5\”>for infile in sys.argv[1:]և件中读取图片,处理其他图片得到,或者直接创建一个图片。

使用Image模块中的open函数打开一张图片:

123 >>> from PIL import Image>>> im = Image.open(\”lena.ppm\”) 

如果打开成功,返回一个Image对象,可以通过对象属性检查文件内容

1234 >>> from __future__ import print_function>>> print(im.format, im.size, im.mode)PPM (512, 512) RGB 

format属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None;size属性是一个tuple,表示图像的宽和高(单位为像素);mode属性为表示图像的模式,常用的模式为:L为灰度图,RGB为真彩色,CMYK为pre-press图像。

如果文件不能打开,则抛出IOError异常。

当有一个Image对象时,可以用Image类的各个方法进行处理和操作图像,例如显示图片:

12 >>> im.show() 

ps:标准版本的show()方法不是很有效率,因为它先将图像保存为一个临时文件,然后使用xv进行显示。如果没有安装xv,该函数甚至不能工作。但是该方法非常便于debug和test。(windows中应该调用默认图片查看器打开)

读写图片

Pillow库支持相当多的图片格式。直接使用Image模块中的open()函数读取图片,而不必先处理图片的格式,Pillow库自动根据文件决定格式。

Image模块中的save()函数可以保存图片,除非你指定文件格式,那么文件名中的扩展名用来指定文件格式。

图片转成jpg格式

12345678910111213 from __future__ import print_functionimport os, sysfrom PIL import Image for infile in sys.argv[1:]:    f, e = os.path.splitext(infile)    outfile = f + \”.jpg\”    if infile != outfile:        try:            Image.open(infile).save(outfile)        except IOError:            print(\”cannot convert\”, infile) 

save函数的第二个参数可以用来指定图片格式,如果文件名中没有给出一个标准的图像格式,那么第二个参数是必须的。

创建缩略图

12345678910111213141516 from __future__ import print_functionimport os, sysfrom PIL import Image size = (128, 128) for infile in sys.argv[1:]:    outfile = os.path.splitext(infile)[0] + \”.thumbnail\”    if infile != outfile:        try:            im = Image.open(infile)            im.thumbnail(size)            im.save(outfile, \”JPEG\”)        except IOError:            print(\”cannot create thumbnail for\”, infile) 

必须指出的是除非必须,Pillow不会解码或raster数据。当你打开一个文件,Pillow通过文件头确定文件格式,大小,mode等数据,余下数据直到需要时才处理。

这意味着打开文件非常快,与文件大小和压缩格式无关。下面的程序用来快速确定图片属性:

确定图片属性

1234567891011 from __future__ import print_functionimport sysfrom PIL import

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...