python,使用PIL库对图片进行操作
在做识别验证码时,需要对验证码图片进行一些处理,所以就学习了一下PIL的知识,下面是我总结的一些常用方法。
注明:图片的操作都需要Image库,所以要使用import Image导入库
1.打开图片
import Image
img=Image.open("code.jpg")
注:有些图片名称是包含中文的,就需要在“”前加上u,例:img=Image.open(u"阿布.jpg")
以下各个操作均是基于原图进行的修改,原图为:

2.展示图片
img.show()
3.打印图片信息
print img.mode,img.size,img.format
打印结果如下:
RGB (508, 493) JPEG
4.保存图片
img.save("img1.png","png")
说明:img为一个图片,存为一个名叫img1的图片,格式为png。后面的png不写也可以,直接按照文件名的后缀.png存为相应格式了。
5.创建一个新的图片
import Image
newImg = Image.new("RGBA",(640,480),(0,255,0))
newImg.save("newImg.png","PNG")
结果如下:

说明:“RGBA”为图片的mode,(640,480)为图片尺寸,(0,255,0)为图片颜色,颜色第四位为alpha值,可填可不填。
6.改变图片尺寸
smallimg=img.resize((128,128),Image.ANTIALIAS)
说明:(128,128)为更改后的尺寸,Image.ANTIALIAS有消除锯齿的效果。
没有消除锯齿的效果如下图:

消除了锯齿的效果如下图:

7.图片类型转换convert
img=img.convert("RGBA")
说明:将img图片的mode转换为"RGBA"格式
8.img.split()分割通道
bands=img.split()
rIm=bands[0]
gIm=bands[1]
bIm=bands[2]
aIm=bands[3]
说明:将img代表的图片分割通道。
如果是RGBA,分割后就有四个通道。bands[0]、bands[1]、bands[2]、bands[3]分别代表了R(red)、G(green)、B(blue)、A(alpha)四个通道。
9.merge合并通道
img=img.convert("RGBA")
bands=img.split()
rIm=bands[0]
gIm=bands[1]
bIm=bands[2]
aIm=bands[3]
remadeImage=Image.merge("RGBA",(rIm,gIm,bIm,aIm))
remadeImage.save("remadeImage.png","png")
说明:使用Image.merge("RGBA",(rIm,gIm,bIm,aIm))将通道合成为一个图片,"RGBA"格式的图片通道分为R(red)、G(green)、B(blue)、A(alpha)。rIm,gIm,bIm,aIm分别为自定义的R、G、B、A。
10.粘贴图片
import Image
img=Image.open(u"阿布.jpg")
img1=Image.open("code.jpg")
img.paste(img1,(0,10))img.save("img2.png")
说明:img.paster(img1,(0,10)是将图片img1粘贴到图片img上。(0,10)是粘贴的坐标位置。
结果如下:

11.拷贝图片,crop
img=Image.open(u"阿布.jpg")
bounds=(0,0,493,254)
cutoutIm=img.crop(bounds)
cutoutIm.save("cotoutIm.png","png")
说明:bounds为自定义的拷贝区域(x1,y1,x2,y2),x1和y1决定了拷贝区域左上角的位置,x2和y2决定了拷贝区域右下角的位置。
img.crop(bounds):拷贝图片img坐标区域在bounds之间的图片。
结果如下:

12.旋转图片rotate
fixedIm=img.rotate(90)
fixedIm.save("fixedIm.png","png")
说明:fixedIm=img.rotate(90),将图片img逆时针旋转90度,存到fixedIm中。
结果如下:

13.对像素进行操作getpixel,putpixel
img=Image.open("smallimg.png")
img.getpixel((4,4))
img.putpixel((4,4),(255,0,0))
img.save("img1.png","png")
说明:getpixel得到图片img的坐标为(4,4)的像素点。putpixel将坐标为(4,4)的像素点变为(255,0,0)颜色,即红色。
结果如下图所示(因为只有一个像素点,所以不是很清晰):

14.使用ImageDraw库进行画图
import ImageDraw
img=Image.open(u'阿布.jpg')
a=ImageDraw.Draw(img)
a.line(((0,0),(508,493)),fill=(255,0,0))
a.line(((0,493),(508,0)),fill=(0,255,0,0))
a.arc((10,10,100,100),0,360,fill=255)
#因为PIL库编译时缺少东西,所以导致字体不能更改
#font = ImageFont.truetype ("Arial.ttf",16)
a.text((10,10),"hello",fill=(255,0,0),font=None)
img.save("img1.png")
说明:1.画图需要导入ImageDraw库。
2.a=ImageDraw.Draw(img),对img图像进行画图操作
3.a.line,画直线。((0,0),(508,493))为直线左右起点的坐标。fill=(255,0,0)为直线填充的颜色。
4.a.arc,画弧线。(10,20,100,300)为弧线最左侧距离左边、弧线最上面距离上面、弧线最右面距离左面、弧线最下面距离左边的距离。fill=255为填充的颜色,也可以写成(255,0,0,0)的格式。
5.a.text为添加文字,(10,10)为添加文字的位置,fill=(255,0,0)为填充文字的颜色,font为文字的字体,None为没有样式,font可以自定义。自定义方法为font = ImageFont.truetype ("Arial.ttf",16)
结果如下图所示:

python,使用PIL库对图片进行操作的更多相关文章
- python 利用PIL库进行更改图片大小的操作
python 是可以利用PIL库进行更改图片大小的操作的,当然一般情况下是不需要的,但是在一些特殊的利用场合,是需要改变图片的灰度或是大小等的操作的,其实用python更改图片的大小还是蛮简单的,只需 ...
- ❤️【Python从入门到精通】(二十六)用Python的PIL库(Pillow)处理图像真的得心应手❤️
您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本篇重点介绍Python处理图像的标准库PIL库,处理图像真的的很方便. 干货满满,建议收藏,需要用到时常看看. 小伙伴们如有问题及需要,欢迎踊跃 ...
- 一秒钟带你走进P图世界-----(python)PIL库的使用
python-----PIL库的使用 一.什么是PIL库 1.PIL(Python Image Library)库是python语言的第三方库,具有强大的图像处理能力,不仅包含了丰富的像素.色彩操作功 ...
- python之PIL库(Image模块)
PIL(Python Image Library)是python的第三方图像处理库,PIL的功能非常的强大,几乎被认定是Python的官方图像处理库了. 由于PIL仅支持到python2.7于是一群志 ...
- Python之PIL库的运用、GIF处理
一.PIL库简介 PIL(Python Image Library)库是Python语言的第三方库,它支持图像存储.显示和处理,它能够处理几乎所有图片格式,可以完成对图像的缩放.剪裁.折叠以及像图片添 ...
- Python之PIL库的运用、GIF处理h
一.PIL库简介 PIL(Python Image Library)库是Python语言的第三方库,它支持图像存储.显示和处理,它能够处理几乎所有图片格式,可以完成对图像的缩放.剪裁.折叠以及像图片添 ...
- Python关于PIL库的学习总结与成果展示
一.关于PIL库的学习总结 PIL(Python Image Library)库是Python语言的第三方库,需要通过pip工具安装.安装PIL库的方法如下,需要注意,安装库的名字是pillow. : ...
- Python之PIL库
Python PIL PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. ...
- python中PIL库的使用
API参考 打开dos窗口,安装库: pip install pillow 很明显,图片有点大,咱们缩略一下: from PIL import Image im = Image.open(" ...
随机推荐
- Java设计原则之里氏替换原则
里氏代换原则由2008年图灵奖得主.美国第一位计算机科学女博士Barbara Liskov教授和卡内基·梅隆大学Jeannette Wing教授于1994年提出.其严格表述如下:如果对每一个类型为S的 ...
- 小甲鱼-003 python插曲值变量和字符串
变量名就像现实生活人们的名字,把一个值赋值给一个名字时,他会存储在内存中,称之为变量variable,在大多数语言中,都把这种行为成为"给变量赋值"或"把值存储在变量中& ...
- jstack 查看线程状态
使用jstack pid命令可以查看JVM的线程状态,其中值得关注的线程状态有:死锁,Deadlock(重点关注)执行中,Runnable等待资源,Waiting on condition(重点关注) ...
- [UE4]C++ string的用法和例子
使用场合: string是C++标准库的一个重要的部分,主要用于字符串处理.可以使用输入输出流方式直接进行操作,也可以通过文件等手段进行操作.同时C++的算法库对string也有着很好的支持,而且st ...
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #16 OOM Killer的运行与结构
HACK #16 OOM Killer的运行与结构(1) 本节介绍OOM Killer的运行与结构. Linux中的Out Of Memory(OOM) Killer功能作为确保内存的最终手段,可以在 ...
- java内存模型(二)深入理解java内存模型的系列好文
深入理解java内存模型(一)--基础 深入理解java内存模型(二)--重排序 深入理解java内存模型(三)--顺序一致性 深入理解java内存模型(四)--volatile 深入理解java内存 ...
- Java读取文件方法大全
1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读 ...
- 关系型数据库之Mysql
简介 主要知识点包括:能够与mysql建立连接,创建数据库.表,分别从图形界面与脚本界面两个方面讲解 相关的知识点包括:E-R关系模型,数据库的3范式,mysql中数据字段的类型,字段约束 数据库的操 ...
- OpenACC 云水参数化方案
▶ 书上第十三章,用一系列步骤优化一个云水参数化方案.用于熟悉 Fortran 以及 OpenACC 在旗下的表现 ● 代码,文件较多,放在一起了 ! main.f90 PROGRAM main US ...
- location 对象属性
Location 对象属性 hash 返回一个URL的锚部分 host 返回一个URL的主机名和端口 hostname 返回URL的主机名 href 返回完整的URL pathname 返回的URL路 ...