15-9 Pillow库Python程序设计基础教程(微课版第2版)_第1页
15-9 Pillow库Python程序设计基础教程(微课版第2版)_第2页
15-9 Pillow库Python程序设计基础教程(微课版第2版)_第3页
15-9 Pillow库Python程序设计基础教程(微课版第2版)_第4页
15-9 Pillow库Python程序设计基础教程(微课版第2版)_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Pillow库CHAPTER15CONTENTS目

录01Pillow概述02Pillow库Image类03Pillow库ImageFilter类和ImageEnhance类04Pillow库ImageDraw类和ImageFont类05图像的字符画绘制Pillow概述Pillow库的主要特点和功能如下:(1)图像格式支持:Pillow支持大量的图像文件格式,包括但不限于JPEG、PNG、BMP、GIF、TIFF、SVG等。开发者可以轻松地读取、编辑和保存这些格式的图像。(2)图像处理功能:Pillow提供了丰富的图像处理功能,如图像缩放、裁剪、旋转、翻转、色彩调整(如亮度、对比度、饱和度、色相调整等)、滤镜效果(如模糊、锐化、边缘检测等)、图像合成(如透明度调整、图层叠加等)。(3)像素级操作:Pillow允许开发者直接访问和操作图像的像素数据。你可以读取像素值,对它们进行修改,然后再将修改后的数据写回到图像中。(4)图像显示:Pillow支持将图像显示在屏幕上,通常配合Tkinter或其他GUI库使用。(5)文字绘制:Pillow支持在图像上绘制文字,可以设置文字内容、字体、大小、颜色等属性。(6)图像分析:Pillow提供了一些基本的图像分析功能,如计算图像的直方图、获取图像的统计信息等。(7)图像转换:Pillow可以将图像转换为不同的颜色模式(如RGB、CMYK、灰度等),以适应不同的输出需求。(8)性能优化:虽然Pillow是用纯Python编写的,但它内部使用了许多优化的算法和C语言扩展,以提供较好的性能。对于大规模的图像处理任务,开发者可以通过调整Pillow的配置或结合其他工具(如NumPy)来进一步提高性能。Pillow概述丰富功能的实现,得益于Pillow提供了众多的模块。在Pillow库中有二十多个模块,比如Image图像处理模块、ImageFont添加文本模块、ImageColor颜色处理模块、ImageDraw绘图模块等等,每个模块各自实现了不同的功能,同时模块之间又可以互相配合。通过Python包管理器pip来安装Pillow是最简单、轻量级的一种安装方式,并且这种方法适用于任何平台,只需执行以下命令即可:>pipinstallpillowPillow库Image类1.创建Image对象Image类是Pillow库中最为重要的类,该类被定义在和与其同名的Image模块中。需要使用下列导包方式引入Image模块:>>>fromPILimportImage使用Image类可以实例化一个Image对象,通过调用该对象的一系列属性和方法对图像进行处理。Pillow提供了两种创建Image实例对象的方法:open()和new(),这里介绍open()的使用方法。使用Image类的open()方法,可以创建一个Image对象,语法格式如下:im=Image.open(fp,mode="r")其中,fp表示文件路径,采用字符串格式;mode是可选参数,若出现该参数,则必须设置为"r",否则会引发ValueError异常。Pillow库Image类下面是具体实例:>>>fromPILimportImage>>>#打开一个位于Python当前工作目录下的图片文件xiamen-university.jpg>>>#需要提前准备好图片xiamen-university.jpg>>>im=Image.open("xiamen-university.jpg")>>>#调用show()方法显示图像>>>im.show()Pillow库Image类2.Image对象的基本属性Image对象有一些常用的基本属性,这些属性能够帮助我们了解图片的基本信息,下面对这些属性用法做简单的演示:>>>fromPILimportImage>>>im=Image.open("xiamen-university.jpg")>>>print("宽是%s高是%s"%(im.width,im.height))>>>print("图像的大小size:",im.size)>>>print("图像的格式:",im.format)>>>print("图像是否为只读:",im.readonly)>>>print("图像信息:",)>>>print("图像模式信息:",im.mode)Pillow库Image类3.Pillow图片格式转换Pillow能够很轻松地实现图片格式之间的转换。图片格式之间的转换主要有两种方法:save()和convert()。save()方法用于保存图像,当不指定文件格式时,它会以默认的图片格式来存储;如果指定图片格式,则会以指定的格式存储图片。save()的语法格式如下:Image.save(fp,format=None)其中,fp是图片的存储路径,包含图片的名称,采用字符串格式;format是可选参数,用于指定图片的格式。>>>fromPILimportImage>>>im=Image.open("xiamen-university.jpg")>>>im.save('xiamen-university.bmp')Pillow库Image类但是,并非所有的图片格式都可以用save()方法转换完成,比如,将PNG格式的图片保存为JPG格式,如果直接使用save()方法就会报错。引发错误的原因是由于PNG和JPG图像模式不一致导致的。其中,PNG是四通道RGBA模式,即红色、绿色、蓝色、Alpha透明色;JPG是三通道RGB模式。因此,要想实现图片格式的转换,就要将PNG转变为三通道RGB模式。Image类提供的convert()方法可以实现图像模式的转换。该函数提供了多个参数,比如mode、matrix、dither等,其中,最关键的参数是mode,其余参数无须关心。语法格式如下:convert(mode,params**)其中,mode指的是要转换成的图像模式;params是其他可选参数。>>>fromPILimportImage>>>#假设在Python当前工作目录下已经存在图片文件example.png>>>im=Image.open("example.png")>>>image=im.convert('RGB')>>>im.save('example.jpg')Pillow库Image类4.Pillow图像缩放操作

在图像处理过程中,经常会遇到缩小或放大图像的情况,Image类提供的resize()方法能够实现任意缩小和放大图像。resize()函数的语法格式如下:resize(size,resample=image.BICUBIC,box=None,reducing_gap=None)各个参数的含义如下:(1)size:元组参数(width,height),图片缩放后的尺寸;(2)resample:可选参数,指图像重采样滤波器,默认为Image.BICUBIC;(3)box:对指定图片区域进行缩放,box的参数值是长度为4的像素坐标元组,即(左,上,右,下)。注意,被指定的区域必须在原图的范围内,如果超出范围就会报错。当不传该参数时,默认对整个原图进行缩放;(4)reducing_gap:可选参数,浮点参数值,用于优化图片的缩放效果,常用参数值有3.0和5.0。Pillow库Image类>>>fromPILimportImage>>>im=Image.open("example.png")>>>print("图像的大小size:",im.size)

>>>image=im.resize((135,54))

#缩小图片>>>image.save("example-small.png")>>>print("查看新图像的尺寸",image.size)Pillow库Image类Image类还支持创建缩略图。缩略图指的是将原图缩小至一个指定大小的图像。通过创建缩略图可以使图像更易于展示和浏览。Image对象提供了一个thumbnail()方法用来生图像的缩略图,该函数的语法格式如下:thumbnail(size,resample)其中,size是元组参数,指的是缩小后的图像大小;resample是可选参数,指图像重采样滤波器,有四种过滤方式,分别是Image.BICUBIC(双立方插值法)、PIL.Image.NEAREST(最近邻插值法)、PIL.Image.BILINEAR(双线性插值法)、PIL.Image.LANCZOS(下采样过滤插值法),默认为Image.BICUBIC。>>>fromPILimportImage>>>im=Image.open("example.png")>>>im.thumbnail((100,50))>>>print("缩略图尺寸",im.size)>>>im.save("example-thumbnail.png")Pillow库Image类在图像处理过程中,对于某些不需要精细处理的环节,我们往往采用批量处理方法,比如批量转换格式、批量修改尺寸等,这是一种提升工作效率的有效途径,它避免了单一、重复的操作。通过Pillow

提供的Image.resize()方法可以批量地修改图片尺寸。>>>#批量修改图片尺寸>>>importos>>>fromPILimportImage>>>#读取图片目录,假设存在“C:/python/image”目录,并且该目录下有很多图片>>>fileName=os.listdir('C:/python/image')>>>print(fileName)>>>#设定尺寸>>>width=200>>>height=200Pillow库Image类>>>#如果目录不存在,则创建目录new-image>>>ifnotos.path.exists('C:/python/new-image/'):>>>

os.mkdir('C:/python/new-image/')>>>#循环读取image目录下的每一张图片,转换尺寸后,保存到new-image目录下>>>forimginfileName:>>>

old_pic=Image.open('C:/python/image/'+img)>>>

new_pic=old_pic.resize((width,height),Image.BILINEAR)>>>

new_pic.save('C:/python/new-image/'+img)Pillow库ImageFilter类和ImageEnhance类1.ImageFilter类Pillow通过ImageFilter类达到图像降噪的目的,该类中集成了不同种类的滤波器,通过调用它们从而实现图像的平滑、锐化、边界增强等图像降噪操作。常见的降噪滤波器如表15-8所示。表15-8ImageFilter类的预定义过滤方法方法功能描述ImageFilter.BLUR图像的模糊效果ImageFilter.CONTOUR图像的轮廓效果ImageFilter.DETAIL图像的细节效果ImageFilter.FIND_EDGES图像的边界效果ImageFilter.EMBOSS图像的浮雕效果ImageFilter.EDGE_ENHANCE图像的边界加强效果ImageFilter.EDGE_ENHANCE_MORE图像的阈值边界加强效果ImageFilter.SMOOTH图像的平滑效果ImageFilter.SMOOTH_MORE图像的阈值平滑效果ImageFilter.SHARPEN图像的锐化效果Pillow库ImageFilter类和ImageEnhance类这里给出ImageFilter类的用法实例。假设有一个厦门大学建南大礼堂的图片xiamen-university.jpg(如图15-11所示),这里根据这个图片生成各种不同的效果图。Pillow库ImageFilter类和ImageEnhance类首先,执行如下代码生成轮廓图(如图15-12所示):>>>#导入Image类和ImageFilter类>>>fromPILimportImage,ImageFilter>>>im=Image.open("xiamen-university.jpg")>>>im2=im.filter(ImageFilter.CONTOUR)>>>im2.save("xiamen-university-contour.png")Pillow库ImageFilter类和ImageEnhance类然后,继续执行如下代码生成边缘检测图(如图15-13所示):>>>im3=im.filter(ImageFilter.FIND_EDGES)>>>im3.save("xiamen-university-edges.png")Pillow库ImageFilter类和ImageEnhance类然后,继续执行如下代码生成浮雕图(如图15-14所示):>>>im4

=im.filter(ImageFilter.EMBOSS)>>>Im4.save("xiamen-university-emboss.png")Pillow库ImageFilter类和ImageEnhance类2.ImageEnhance类ImageEnhance类提供了更高级的图像增强功能,如调整色彩度、亮度、对比度、锐化等,如表15-9所示。表15-9ImageEnhance类的图像增强方法方法功能描述ImageEnhance.enhance(factor)对选择属性的数值增强factor倍ImageEnhance.Color(im)调整图像的颜色平衡ImageEnhance.Contrast(im)调整图像的对比度ImageEnhance.Brightness(im)调整图像的亮度ImageEnhance.Sharpness(im)调整图像的锐度Pillow库ImageFilter类和ImageEnhance类下面给出一个具体实例(图像增强效果如图15-15所示):>>>fromPILimportImage>>>fromPILimportImageEnhance>>>im=Image.open("xiamen-university.jpg")>>>im2=ImageEnhance.Contrast(im)>>>im2.enhance(20).save("xiamen-university-enhance.jpg")Pillow库ImageDraw类和ImageFont类1.ImageDraw类ImageDraw类提供了一系列的绘图方法,通过该模块可以创建一个新的图形,或者在现有的图像上再绘制一个图形,从而起到对原图注释和修饰的作用。下面创建一个ImageDraw对象:draw=ImageDraw.Draw(im)上述方法会返回一个ImageDraw对象,参数im表示Image对象。这里可以把Image对象理解成画布,通过调用ImageDraw对象的一些方法,实现了在画布上绘制出新的图形目的。ImageDraw对象的常用方法如表15-10所示。表15-10ImageDraw对象的常用方法方法功能描述text在图像上绘制文字line绘制直线、线段eclipse绘制椭圆形rectangle绘制矩形polygon绘制多边形Pillow库ImageDraw类和ImageFont类绘制矩形图的语法格式如下:draw.rectangle(xy,fill=None,outline=None)各个参数的含义如下:(1)xy:元组参数值,以图像的左上角为坐标原点,表示矩形图的位置、图形大小的坐标序列,形如((x1,y1,x2,y2));(2)fill:矩形图的背景填充色;(3)outline:矩形图的边框线条颜色。这里给出一个具体实例:>>>fromPILimportImage,ImageDraw>>>#创建Image对象,作为背景图>>>im=Image.new('RGB',(300,300),color='yellow')>>>#创建ImageDraw对象>>>draw=ImageDraw.Draw(im)>>>#以左上角为原点,绘制矩形>>>draw.rectangle((50,100,100,150),fill=(255,0,0),outline=(0,0,0))>>>#保存图片>>>im.save("rectangle.png")

#保存以后的图片如图15-16所示Pillow库ImageDraw类和ImageFont类2.ImageFont类ImageFont类通过加载不同格式的字体文件,从而在图像上绘制出不同类型的文字。创建字体对象的语法格式如下:font=ImageFont.truetype(font='字体文件路径',size=字体大小)如果想要在图片上添加文本,还需要使用ImageDraw.text()方法,语法格式如下:d.text((x,y),"text",font,fill)各个参数的含义如下:(1)(x,y):图像左上角为坐标原点,(x,y)表示添加文本的起始坐标位置;(2)text:字符串格式,表示要添加的文本内容;(3)font:ImageFont对象;(4)fill:文本填充颜色。Pillow库ImageDraw类和ImageFont类3.为图片添加水印

这里给出一个为图片添加文字水印的实例:>>>fromPILimportImage,ImageFont,ImageDraw>>>#打开图片,返回Image对象>>>im=Image.open("xiamen-university.jpg")>>>#创建画布对象>>>draw=ImageDraw.Draw(im)>>>#加载计算机本地字体文件>>>font=ImageFont.truetype(font='C:\\Windows\\Fonts\\simhei.ttf',size=36)>>>#在原图像上添加文本>>>draw.text(xy=(90,60),text='厦门大学',fill=(255,0,0),font=font)>>>im.save("xiamen-university-watermark.jpg")

#生成的图片如图15-17所示Pillow库ImageDraw类和ImageFont类图15-17添加文字水印后的图片图像的字符画绘制使用Pillow来创建字符画(ASCIIArt)是一个有趣的任务。基本思路是遍历图像的每个像素,然后根据其颜色或亮度将其映射到一个字符上。下面的代码文件ascii_img.py是一个简单的示例,展示了如何使用Pillow和Python来实现这个功能。#ascii_img.pyfromPILimportImagedefscale_image(img,new_width=100):(original_width,original_height)=img.sizeaspect_ratio=original_height/float(original_width)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论