百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python图片处理模块PIL(pillow)(4)

off999 2024-10-29 14:57 33 浏览 0 评论

Python图片处理模块PIL(pillow)(4)

转载自:https://blog.csdn.net/qq_20852429/article/details/79112595

(三)Image模块函数

16、 Point

定义1:im.point(table)? image
 im.point(function) ? image
含义1:返回给定查找表对应的图像像素值的拷贝。变量table为图像的每个通道设置256个值。如果使用变量function,其对应函数应该有一个参数。这个函数将对每个像素值使用一次,结果表格将应用于图像的所有通道。
 
如果图像的模式为“I(整数)”或者“F(浮点)”,用户必须使用function方式,function必须按照下面的格式:
argument * scale+ offset
例如:
out = im.point(lambda i: i * 1.2 + 10)
用户可以省略变量scale和offset。
 
例子1:
from PIL import Image
im = Image.open("jing.png")
im_point = im.point(lambda x:x*1.3+5)
im_point.save("he.png")
注:图像im_point_fun比原图im01亮度增加了很多;因为lambda表达式中对原图的每个像素点的值都做了增加操作。
 
定义2:im.point(table,mode) ? image
 im.point(function, mode) ? image
含义2:与定义1一样,但是它会为输出图像指定一个新的模式。这个方法可以一步将模式为“L”和“P”的图像转换为模式为“1”的图像。
 
例子2:
from PIL import Image
im = Image.open("jing.png")
r,g,b = im.split()
im_point1 = r.point(lambda x:x*1.3+5,"1")
print(im_point1.getpixel((0,0)))
im_point1.save("he1.png")
im_point2 = r.point(lambda x:0,"1")
im_point2.save("he2.png")
print(im_point2.getpixel((10,10)))
输出为:
0
图像im_point1为全白图
图像im_point2为全黑图

17、Putalpha

作用:对图像添加 alpha 层,即将给定通道拷贝到图像 alpha 层.
im.putalpha(alpha)
注意:图像 im 必须是 "RGBA",alpha 必须是 "L" 或 "1".
可以将一张与原图尺寸相同的图片写入到原图片的透明通道之中,但不会影响原图片的正常显示. 可用于信息隐藏. 在做信息隐藏时,需要原图具有透明通道.
如果原图没有透明通道,可以采用 PIL 的 im.convert 函数,转换为 "RGBA" 模式;同时确保要隐藏的信息图像为 "L" 或 "1" 模式.
如:
from PIL import Image
def hideImageInImage(im, alpha):
 if im.mode != "RGBA":
 im = im.convert("RGBA")
 if alpha.mode != "L" and alpha.mode != "1":
 alpha = alpha.convert("L")
 im.putalpha(info)
 return im

18、 Putdata

定义:im.putdata(data)
 im.putdata(data, scale, offset)
 
含义:从sequence对象中拷贝数据到当前图像,从图像的左上角(0,0)位置开始。变量scale和offset用来调整sequence中的值:
pixel = value *scale + offset
如果变量scale忽略,则默认为1.0。如果变量offset忽略,则默认为0.0。
 
例子:
from PIL import Image
im =Image.open("jing.png")
r,g,b =im.split()
print(r.getpixel((0,0)))
print(r.getpixel((1,0)))
print(r.getpixel((2,0)))
print(r.getpixel((3,0)))
r.putdata([1,2,3,4])
print(r.getpixel((0,0)))
print(r.getpixel((1,0)))
print(r.getpixel((2,0)))
print(r.getpixel((3,0)))
输出:
10
6
2
4

19、 Putpalette

定义:im.putpalette(sequence)
含义:为“P”或者“L”图像增加一个调色板。对于“L”图像,它的模式将变化为“P”。调色板序列需要包含768项整数,每组三个值表示对应像素的红,绿和蓝。用户可以使用768个byte的字符串代替这个整数序列。
 
例子:
from PIL import Image
im =Image.open("jing.png")
r,g,b = im01.split()
print(r.mode)
r.putpalette([1,2,3])
print(r.mode)
输出:
'L'
'P'

20、 Putpixel

定义:im.putpixel(xy,colour)
含义:修改指定位置上的像素值。对于单通道图像,变量colour为一个数值;对于多通道图像,变量colour为一个元组。
注意:这个方法执行比较慢。如果是1.1.6版本,像素访问对象(参考load方法)提供了一个更快的方法修改图像。
 如果用户要生成整幅图像,可以使用更有效的方法产生一个python list,然后使用方法putdata()将它拷贝到图像上去。对于更大的改变,使用方法paste或者ImageDraw模块。
 
例子:
from PIL import Image
im =Image.open("jing.png")
print(im.getpixel((0,0)))
im.putpixel((0,0),(1,2,3))
print(im.getpixel((0,0)))
输出:
(11, 113, 198)
(1, 2, 3)

21、 Quantize

定义:im.quantize(colors,**options) ? image
含义:(不赞成)使用给定的颜色将“L”或者“RGB”图像转换为“P”图像,返回新的图像。
新的代码中,使用有自适应的调色板的convert方法来代替:
out =im.convert("P", palette=Image.ADAPTIVE,colors=256) 

22、 Resize

定义:im.resize(size) ? image
 im.resize(size, filter) ? image
含义:返回改变尺寸的图像的拷贝。变量size是所要求的尺寸,是一个二元组:(width, height)。
 变量filter为NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果忽略,或者图像模式为“1”或者“P”,该变量设置为NEAREST。
注意:在当前的版本中bilinear和bicubic滤波器不能很好地适应大比例的下采样(例如生成缩略图)。用户需要使用ANTIALIAS,除非速度比质量更重要。

23、 Rotate

定义:im.rotate(angle) ? image
 im.rotate(angle,filter=NEAREST, expand=0) ? image
含义:返回一个按照给定角度顺时钟围绕图像中心旋转后的图像拷贝。
变量filter应该是NEAREST、BILINEAR或者BICUBIC之一。如果省略该变量,或者图像模式为“1”或者“P”,则默认为NEAREST。
变量expand,如果为true,表示输出图像足够大,可以装载旋转后的图像。如果为false或者缺省,则输出图像与输入图像尺寸一样大。
 
例子:
from PIL import Image
im = Image.open("jing.png")
im_30 = im.rotate(30)
im_30.save("he1.png")
im_31 = im.rotate(30,Image.BICUBIC,1)
im_31.save("he2.png")
注:im_30旋转30度大小不变,im_31旋转30度大小改变

24、 Save

定义:im.save(outfile,options…)
 im.save(outfile, format, options…)
含义:使用给定的文件名保存图像。如果变量format缺省,如果可能的话,则从文件名称的扩展名判断文件的格式。该方法返回为空。
 关键字options为文件编写器提供一些额外的指令。如果编写器不能识别某个选项,它将忽略它。
 用户可以使用文件对象代替文件名称。在这种情况下,用户必须指定文件格式。文件对象必须实现了seek()、tell()和write()方法,且其以二进制模式打开。
 如果方法save()因为某些原因失败,这个方法将产生一个异常(通常为IOError异常)。如果发生了异常,该方法也有可能已经创建了文件,并向文件写入了一些数据。如果需要的话,用户的应用程序可以删除这个不完整的文件。

25、 Seek

定义:im.seek(frame)
含义:在给定的文件序列中查找指定的帧。如果查找超越了序列的末尾,则产生一个EOFError异常。当文件序列被打开时,PIL库自动指定到第0帧上。
注意:在当前的版本上,大多数序列格式只允许用户查找下一帧,不能跳跃式查找指定的帧。
 
例子:
 
from PIL import Image
im_gif = Image.open("xin.gif")
print(im_gif.mode)
im_gif.seek(2)
im_gif.save("he1.png")
im_gif.seek(8)
im_gif.save("he2.png")
输出:
'P'
注:通过上面的code,分别找到了第2帧和第8帧图像。

26、 Show

定义:im.show()
含义:显示一张图像。这个方法主要用于调试。
在Unix平台,这个方法将图像保存为临时的PPM文件,并且调用xv功能。
在widows中,它将图像保存为临时的BMP文件,并且使用标准的BMP显示功能显示它。
这个方法返回空。
 
例子:
from PIL import Image
im = Image.open("jing.png")
im.show()

27、 Split

定义:im.split() ? sequence
含义:返回当前图像各个通道组成的一个元组。例如,分离一个“RGB”图像将产生三个新的图像,分别对应原始图像的每个通道(红,绿,蓝)。
 
例子:
from PIL import Image
im = Image.open("jing.png")
r,g,b = im.split()
b.save("he.png")
print(b.getpixel((1,3)))

28、 Tell

定义:im.tell() ? integer
含义:返回当前帧所处位置,从0开始计算。
 
例子:
from PIL import Image
im_gif = Image.open("xin.gif")
print(im_gif.tell())
im_gif.seek(8)
print(im_gif.tell())
输出:
8

29、 Thumbnail

定义:im.thumbnail(size)
 im.thumbnail(size, filter)
含义:修改当前图像,使其包含一个自身的缩略图,该缩略图尺寸不大于给定的尺寸。这个方法会计算一个合适的缩略图尺寸,使其符合当前图像的宽高比,调用方法draft()配置文件读取器,最后改变图像的尺寸。
 变量filter应该是NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果省略该变量,则默认为NEAREST。
注意:在当前PIL的版本中,滤波器bilinear和bicubic不能很好地适应缩略图产生。用户应该使用ANTIALIAS,图像质量最好。如果处理速度比图像质量更重要,可以选用其他滤波器。
 这个方法在原图上进行修改。如果用户不想修改原图,可以使用方法copy()拷贝一个图像。这个方法返回空。
 
例子:
from PIL import Image
im = Image.open("jing.png")
im.thumbnail((10,10))
im.save("he.png")
注:已经为图像im01创建了不大于10x10的缩略图。

30、 Tobitmap

定义:im.tobitmap()? string
含义:返回转换为X11的bitmap图像。

31、 Transform

定义1:im.transform(size,method, data) ? image
 im.transform(size, method, data, filter) ? image
含义1:使用给定的尺寸生成一张新的图像,与原图有相同的模式,使用给定的转换方式将原图数据拷贝到新的图像中。
 在当前的PIL版本中,参数method为EXTENT(裁剪出一个矩形区域),AFFINE(仿射变换),QUAD(将正方形转换为矩形),MESH(一个操作映射多个正方形)或者PERSPECTIVE。
 变量filter定义了对原始图像中像素的滤波器。在当前的版本中,变量filter为NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果忽略,或者图像模式为“1”或者“P”,该变量设置为NEAREST。
含义2:从图像中裁剪一个区域。
 变量data为指定输入图像中两个坐标点的4元组(x0,y0,x1,y1)。输出图像为这两个坐标点之间像素的采样结果。例如,如果输入图像的(x0,y0)为输出图像的(0,0)点,(x1,y1)则与变量size一样。
 这个方法可以用于在当前图像中裁剪,放大,缩小或者镜像一个任意的长方形。它比方法crop()稍慢,但是与resize操作一样快。
含义3:对当前的图像进行仿射变换,变换结果体现在给定尺寸的新图像中。
 变量data是一个6元组(a,b,c,d,e,f),包含一个仿射变换矩阵的第一个两行。输出图像中的每一个像素(x,y),新值由输入图像的位置(ax+by+c, dx+ey+f)的像素产生,使用最接近的像素进行近似。
 这个方法用于原始图像的缩放、转换、旋转和裁剪。
 
定义4:im.transform(size,QUAD, data) ? image
 im.transform(size, QUAD, data, filter) ? image
含义4:输入图像的一个四边形(通过四个角定义的区域)映射到给定尺寸的长方形。
 变量data是一个8元组(x0,y0,x1,y1,x2,y2,x3,y3),它包括源四边形的左上,左下,右下和右上四个角。
 
含义5:与QUAD类似,但是变量data是目标长方形和对应源四边形的list。
 
定义6:im.transform(size,PERSPECTIVE, data) ? image
 im.transform(size, PERSPECTIVE, data, filter) ? image
含义6:对当前图像进行透视变换,产生给定尺寸的新图像。
 变量data是一个8元组(a,b,c,d,e,f,g,h),包括一个透视变换的系数。对于输出图像中的每个像素点,新的值来自于输入图像的位置的(a x + b y + c)/(g x + h y + 1), (d x+ e y + f)/(g x + h y + 1)像素,
 使用最接近的像素进行近似。
 这个方法用于原始图像的2D透视。

32、 Transpose

定义:im.transpose(method)? image
含义:返回当前图像的翻转或者旋转的拷贝。
变量method的取值为:FLIP_LEFT_RIGHT,FLIP_TOP_BOTTOM,ROTATE_90,ROTATE_180,或者ROTATE_270。
 
例子:
from PIL import Image
im = Image.open("jing.png")
im = im01.transpose(Image.FLIP_LEFT_RIGHT)
注:图像im为图像im01的水平方向镜像。

33、 Verify

定义:im.verify()
含义:尝试判断文件是否损坏,实际上并没有对图像数据进行解析。如果这个方法发现了任何问题,它将产生对应的异常。这个方法只工作于刚打开的图像;如果图像已经被加载,该方法的结果将会是未定义的。如果用户在使用这个方法后需要加载图像,用户需要重新打开图像文件。
注意:这个方法不能捕获所有的错误;要捕获解码错误,用户必须加载整个图像。
 
例子:
from PIL import Image
im01 = Image.open("jing.png")
im01.verify()
注:没有任何输出,表示图像im01是没有损坏的

PIL用得比较多,看见一个总结就想保存下来~

相关推荐

戴尔官网保修查询入口(戴尔售后保质期查询)

可以按照以下步骤查询戴尔笔记本电脑的保修期:1.打开戴尔官网:https://www.戴尔.com/zh-cn/售后服务/保修政策.html2.点击页面上方的“服务与支持”按钮,进入戴尔的服务支持...

手机号邮箱登录入口(手机号邮箱官网)

手机163邮箱登录入口如下:163邮箱官网入口:https://smart.mail.163.com/login.htm点击进入登录或者注册邮箱即可。手机浏览器访问进入官网http://www.123...

sd卡(sd卡无法读取怎么修复)

  SD卡是大卡,相机用的;普通的手机内存卡,是小卡,正规的名称是macrosd卡,也就是微型SD卡。可以通过卡套转为普通的SD卡的大小。  其实就是大小不同。但手机上的内存卡,人们经常也俗称为SD...

路由器连接图(网络路由器连接图)
  • 路由器连接图(网络路由器连接图)
  • 路由器连接图(网络路由器连接图)
  • 路由器连接图(网络路由器连接图)
  • 路由器连接图(网络路由器连接图)
windows7蓝牙功能在哪里打开

点击搜索框在windows7系统主界面点击开始菜单,点击打开搜索框。输入命令输入services.msc后回车,在列表中找到并右击BluetoothSupportS...点击属性选择进入属性菜单,...

2010激活密钥(microsoft2010激活密钥)
2010激活密钥(microsoft2010激活密钥)

步骤/方式1officeprofessionalplus2010:(office专业版)6QFdx-pYH2G-ppYFd-C7RJM-BBKQ8Bdd3G-xM7FB-Bd2HM-YK63V-VQFdKVYBBJ-TRJpB-QFQ...

2025-11-19 04:03 off999

联想官方刷新bios工具(联想电脑刷新bios)

刷新BIOS需要使用联想的官方网站或授权维修中心来进行操作。以下是一些基本步骤:1.访问联想的官方网站,找到BIOS更新程序并下载。在下载过程中,请确保选择与您计算机型号匹配的版本。2.将下载的B...

苹果ios14系统下载(苹果ios14.1下载)
苹果ios14系统下载(苹果ios14.1下载)

1方法一步骤/方式一打开Appstore。步骤/方式二在搜索栏点击搜索框。步骤/方式三搜索并点击需要下载的软件。步骤/方式四点击获取。步骤/方式五最后验证ID密码即可。1.在应用商店搜索你要下载的应用名称。2.点击下载按钮,如果要求登...

2025-11-19 03:03 off999

office2010怎么免费永久激活密钥

用这个试试,一个KMS激活工具可以激活2010到2019的Office自家的目前用的就是这个microsoft6477.moe/1716.html直接使用这个Microsoftoffice2010...

类似爱加速的国内ip(类似爱加速的app)
类似爱加速的国内ip(类似爱加速的app)

推荐“V8盒子”。这一款免费无广告的模拟器,不同于其它软件盒子,而是类似于X8沙箱,满足游戏多开,画中画,悬浮球操作,熄屏后台运行等多功能的沙箱盒子.支持一键root,一键安装xposed框架,能在安卓/苹果手机上运行多个安卓/ios虚拟系...

2025-11-19 02:03 off999

阿里旺旺手机客户端(阿里旺旺手机app)

手机淘宝的旺旺在打开商品后,会看到左下角有个旺旺的图标,点击就可以联系了。  阿里旺旺是将原先的淘宝旺旺与阿里巴巴贸易通整合在一起的一个新品牌。它是淘宝和阿里巴巴为商人量身定做的免费网上商务沟通软件,...

最纯净的pe装机工具(pe工具哪个纯净)

U盘装系统步骤:1.制作U盘启动盘。这里推荐大白菜U盘启动盘制作工具,在网上一搜便是。2.U盘启动盘做好了,我们还需要一个GHOST文件,可以从网上下载一个ghost版的XP/WIN7/WIN8系统,...

装一个erp系统多少钱(wms仓库管理软件)

现在主流有客户端ERP和云端ERP两种客户端通常一次买断,价格在万元左右,但是还有隐性费用,你需要支付服务器、数据管理员,此外如果系统需要更新维护,你还需要支付另外一笔不菲的费用。云端ERP:优势...

cad2014序列号和密钥永久(autocad2014序列号和密钥)

1在cad2014中修改标注样式后,需要将其保存2单击“样式管理器”按钮,在弹出的窗口中选择修改后的标注样式,然后单击“设置为当前”按钮,再单击“保存当前样式”按钮,将其保存为新的样式名称3为了...

qq修改密保手机号(qq修改密保手机号是什么意思)

QQ更改绑定的手机号码操作步骤如下:1、打开手机主界面,找到“QQ”软件点击打开。2、输入正确的QQ账户和密码登录到qq主界面。3、点击左上角的头像“图片”,进入到个人中心界面。4、进入到个人中心界面...

取消回复欢迎 发表评论: