Pillow使用Image篇的使用
安装pillow
pip install pillow
构建图像
image.open(fp, mode ='r' ):打开图片文件,返回一个image对象
- fp:图片路径
- mode:模式。如果给出,必须是r
from pil import image im = image.open(path)
image.alpha_composite(im1, im2):在im1对象上的透明层复合im2,返回一个image对象
- im1:image对象1
- im2:image对象2
from pil import image im1 = image.open(path1) im2 = image.open(path2) im3 = image.alpha_composite(im1,im2)
image.blend(im1, im2, alpha):在两个图片对象之间进行插值,返回一个image对象
- im1:image对象1
- im2:image对象2
- alpha:透明图
如果alpha为0.0,则返回第一个图像的副本。如果alpha为1.0,则返回第二个图像的副本,基本的算法如下:
out = image1 * (1.0 - alpha ) + image2 * alpha
image.eval(image, *args):将函数应用于给定图像的中每一个像素。请注意,该函数对每个可能的像素值都进行一次评估,因此您不能使用随机组件或其他生成器。返回一个image对象
- image:image对象
- args:一个函数对象和该函数的一个取整参数
from pil import image def func(a): return a im1 = image.open(path1) img = image.eval(img1,func,1)
image.merge(mode, bands):将一组单波段图像合并成为一个多波段图像。返回一个image对象
- mode:用于输出图像的模式。支持的模式请看下方pillow支持的模式表
- bands:输出图像中每个波段包含一个单波段图像的序列
image.new(mode, size, color=0):根据模式、大小和颜色创建一个新的image对象。烦会一个image对象
- mode:用于新图像的模式。支持的模式请看下方pillow支持的模式表
- size: 大小,元组类型,包含宽度与高度
- color:用于新图像的颜色。传入一个整数的单波段模式,或传入一个元组的多波段模式,或者传入一个imagecolor对象
from pil import image # 单个整数值 img = image.new("rgba",(1024,768),215) # 元组 img = image.new("rgba",(1024,768),(215,0,0) # imagecolor from pil import imagecolor color = imagecolor.getrgb("#ff0000") img = image.new("rgba",(1024,768),color) img.show()
从上面代码运行结果显示是一个红色,1024*768的图像
图像对象
alpha_composite(im, dest=(0,0), source=(0,0)):在image对象中符合im,效果与类方法alpha_composite相似。无返回值
- im:image对象
- dest:指定此(目标)图像左上角的可选的长度为2的元组(左,上)
- source:盖源图像中左上角的长度为2的元组(左,上)或源矩形边界的长度为4的元组(左,上,右,下)
- copy():复制此图片
from pil import image img = image.new("rgba",(1024,768),215) img_copy = img.copy()
crop(box=none):返回此图像的一个矩形区域,为一个image对象
- box:裁剪矩形,为一个长度为4的元组(左,上,右,下)
from pil import image img = image.new("rgba",(1024,768),215) img_copy = img.crop(box=(0,0,500,500))
draft(mode, size):配置图像文件加载器,以便返回尽可能接近给定模式和大小的图像版本,无返回值
- mode:模式
- size:大小
filter(filter):使用给定的过滤器过滤此图像,返回一个image对象
- filter:过滤器
getbands():获取此图像中每个波段名称的元组。返回一个tuple
from pil import image img = image.new("rgba",(1024,768),215) print img.getbands() # ('r', 'g', 'b', 'a')
getbbox():计算图像中非零区域的边界框,返回一个tuple
from pil import image img = image.new("rgba",(1024,768),215) print img.getbbox() # (0, 0, 1024, 768)
getcolors(maxcolors=256):返回此图像中使用的颜色列表,返回一个计算与像素元组组成的元组列表
- maxcolors: 最大颜色数量,超过此值,当前方法将返回none
from pil import image img = image.new("rgba",(1024,768),215) print img.getcolors() # [(786432, (215, 0, 0, 0))]
getdata(band=none):以包含像素值的序列对象的形式返回此图像的内容。返回一个可迭代对象。
- band:波段,默认是获取所有。如果需要获取单波段,传入索引值(例如0从“rgb”图像中获得“r”波段)。
from pil import image img = image.new("rgba",(1024,768),215) for item in img.getdata(): print item # 打印结果: (215, 0, 0, 0) (215, 0, 0, 0) (215, 0, 0, 0) ...
getextrema():获取每个波段的最小和最大像素值。对于单波段图像,返回一个长度为2的元组。对与多波段图像,每个波段包含一个2元组。
from pil import image img = image.new("rgba",(1024,768),215) print img.getextrema() # ((215, 215), (0, 0), (0, 0), (0, 0))
getpalette():返回图像的调色板,返回一个list对象。如果没有调色板,则返回none
from pil import image img = image.new("rgba",(1024,768),215) print img.getpalette() # none
getpixel(xy):返回给定位置的像素值,返回一个tuple
- xy:位置,以(x,y)给出的坐标。
from pil import image img = image.new("rgba",(1024,768),215) print img.getpixel((500,500)) # (215, 0, 0, 0)
histogram(mask=none, extrema=none):返回图像的直方图。直方图以像素计数列表的形式返回,返回一个列表。
- mask:掩码
- extrema:极值
paste(im, box=none, mask=none):将im图像粘贴到此图像上面。无返回值
- box:box可以是图像左上角的长度为2的元组(左,上)或长度为4的元组(左,上,右,下)
- mask:掩码
import os from pil import image path1 = os.path.join(os.getcwd(),"23.png") img1 = image.open(path1) img = image.new("rgba",(1024,768),215) img1.paste(img) img1.show()
putdata(data, scale=1.0, offset=0.0):将像素数据复制到此图像上面。从图像左上角开始,直到图像或序列结束,无返回值。比例和偏移值用于调整序列值:pixel = value * scale + offset。
- data:一个图像数据序列
- scale:缩放比例值
- offset:偏移量值
from pil import image img = image.new("rgba",(1024,768),215) img_c = image.new("rgba",(1024,768),-100) img.putdata(img_c.getdata()) img.show()
putpalette(data, rawmode='rgb'):附加一个调色板到这个图像。图像的模式必须是p或者l。返回一个image对象
- data:调色板序列
- rawmode:调色板的原始模式
from pil import image img = image.new("p",(1024,768),215) img_c = image.new("p",(1024,768),-100) img_c.putpalette(img.getpalette()) img_c.show()
quantize(colors=256, method=none, kmeans=0, palette=none):将图像转换为具有指定数量的颜色的p模式图像,返回一个image对象
- colors:所需颜色的数量,<=256
- method:0:中值切割,1:最大覆盖率,2:快速八叉树,3:libimagequant
- kmeans:整数
- palette:量化给定的调色板
from pil import image img = image.new("rgba",(1024,768),215) img_q = img.quantize(colors=256,method=2) print img_q # <pil.image.image image mode=p size=1024x768 at 0x2bf7e80>
resize(size, resample=0, box=none):返回此图像的调整大小后的副本。返回一个image对象
- size:以像素为单位的长度为2的元组(宽度,高度)
- resample:重采样滤波器。可以设置为:image.nearest、image.box、image.bilinear、image.hamming、image.bicubic或者image.lanczos。如果省略,或者图像模式为1或者p,则设置image.nearest。
- box:一个浮点数组成的长度为4的元组,给出应该缩放的源图像的区域。值应该在(0,0,宽度,高度)的矩形内。
from pil import image img = image.new("rgba",(1024,768),215) img_r = img.resize(size=(500,500)) print img_r # <pil.image.image image mode=rgba size=500x500 at 0x37a6e80>
rotate(angle, resample=0, expand=0, ceter=none, translate=none):旋转图像,并返回旋转后的图像副本。返回image对象
- angle:角度,逆时针旋转
- resample:重采样滤波器。可以是:image.nearest、image.bilinear或者image.bicubic。如果省略,或者图像模式为1或者p,则设置image.nearest。
- expand:是否展开。如果为true,则展开输出图像以使其足够大以容纳整个旋转后的图像。如果为false或省略,使输出图像的大小与输入图像相同。
- center:旋转中心,长度为2的元组(宽度,高度),原点是左上角,默认是图像的中心
- translate:旋转后。一个长度为2的元组(宽度,高度)
import os from pil import image path1 = os.path.join(os.getcwd(),"23.png") img1 = image.open(path1) img_r = img1.rotate(45,image.bicubic) img_r.show()
可以看到,图像已经逆时针旋转了45度
save(fp, format=none, **params):保存图像到给定的文件名下。如果没有指定格式,则可以使用文件扩展名来确定要使用的格式。无返回值
- fp:文件名或路径
- format:可选的格式覆盖
import os from pil import image path1 = os.path.join(os.getcwd(),"23.png") img1 = image.open(path1) img_r = img1.rotate(45,image.bicubic) img_r.save(os.path.join(os.getcwd(),"rotate.png"))
seek(frame):在这个序列文件中寻找给定的帧。如果您在序列结束之外寻找方法,则会 引发eoferror异常。当序列文件被打开时,库会自动寻找0帧。无返回值
- frame:帧号。从0开始
show(title=none, command=none):显示这个图像,此方法主要用于调试目的。无返回值
- title:在可能的情况下,用于图像窗口的可选标题。
- command:用于显示图像的命令
split():将图像分割成单独的波段。该方法从图像中返回一个单独的图像的元组。例如,拆分“rgb”图像会创建三个新图像,每个图像都包含原始波段(红色,绿色,蓝色)之一的副本。返回一个tuple
from pil import image path1 = os.path.join(os.getcwd(),"23.png") img1 = image.open(path1) data = img1.split() print data # (<pil.image.image image mode=l size=3500x3500 at 0x2dec438>, <pil.image.image image mode=l size=3500x3500 at 0x2dec860>, <pil.image.image image mode=l size=3500x3500 at 0x2dec898>, <pil.image.image image mode=l size=3500x3500 at 0x2dec8d0>)
getchannel(channel):返回包含源图像的单个通道的图像。返回l模式的图像,返回一个image对象
- channel:返回什么频道的图像。可以是索引(“rgba”的”r”通道为0)或通道名称(“rgba”的alpha通道为”a”)
from pil import image path1 = os.path.join(os.getcwd(),"23.png") img1 = image.open(path1) im = img1.getchannel(0) 或者: im = img1.getchannel("r")
tell():获取当前的帧号。返回int
thumbnail(size, resample=3):将此图像制作成缩略图。该方法修改图像以包含其本身的缩略图版本,不大于给定尺寸。无返回值
- size:大小
- resample:重采样滤波器。可以是:image.nearest、image.bilinear、image.bicubic或者image.lanczos。如果省略,则默认为image.bicubic
from pil import image path1 = os.path.join(os.getcwd(),"23.png") img1 = image.open(path1) img1.thumbnail(size=(500,500),resample=image.bicubic) print img1 # <pil.pngimageplugin.pngimagefile image mode=rgba size=500x500 at 0x311c3c8>
tobitmap(name='image'):返回转换为x11位图的图像。此方法只使用于模式为1的图像,返回一个str
- name:用于位图变量的前缀名称
from pil import image img = image.new("1",(1024,768),215) data = img.tobitmap(name='abc') print data # 结果如下: """ #define abc_width 1024 #define abc_height 768 static char abc_bits[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ... }; """
tobytes(encoder_name='raw', *args):以图像作为字节对象返回。为一个str对象
transpose(method):旋转或翻转图像,返回旋转或翻转后的图像副本,一个image对象
- method:可以是:image.flip_left_right、image.flip_top_bottom、image.rotate_90、image.rotate_180、image.rotate_270、image.transpose或者image.transverse
from pil import image path1 = os.path.join(os.getcwd(),"23.png") img1 = image.open(path1) im = img1.transpose(image.flip_left_right) im.show()
可以看出图像已经翻转了
close():关闭文件指针
图像对象属性
filename:源文件的文件名或路径。只有通过open方法构建的图像对象才具有此属性
import os from pil import image path1 = os.path.join(os.getcwd(),"23.png") img = image.open(path1) print img.filename # 、/aaa/bbb/ccc/23.png
format:源文件的图片格式。对于由库自身创建的图像,此属性值为none
import os from pil import image path1 = os.path.join(os.getcwd(),"23.png") img = image.open(path1) print img.format # png img = image.new("rgba",(1024,768),215) print img.format # none
mode:图像模式。这是一个字符串,指定图像使用的像素格式。
from pil import image img = image.new("rgba",(1024,768),215) print img.mode # rgba
size:图像大小,以像素为单位。大小以长度为2的元组(宽度,高度)给出。类型tuple
from pil import image img = image.new("rgba",(1024,768),215) print img.size # (1024, 768)
width:图像宽度,以像素为单位。类型int
from pil import image img = image.new("rgba",(1024,768),215) print img.width # 1024
height:图像高度,以像素为单位。类型int
from pil import image img = image.new("rgba",(1024,768),215) print img.height # 768
palette:调色板表。如果模式为p,这应该是imagepalette类的一个实例。否则为none
from pil import image img = image.new("rgba",(1024,768),215) print img.palette # none img = image.new("p",(1024,768),215) print img.palette # <pil.imagepalette.imagepalette object at 0x0000000002ef9828>
info:保存与图像相关的数据的字典。这个字典被文件处理程序用来传递从文件读取的各种非图像信息。
import os from pil import image path1 = os.path.join(os.getcwd(),"23.png") img = image.open(path1) print img.info # 结果如下: ''' { 'chromaticity': (0.31269, 0.32899, 0.63999, 0.33001, 0.3, 0.6, 0.15, 0.05999), 'icc_profile': 'xxxx/...', 'dpi': (300, 300) } ''' img = image.new("rgba",(1024,768),215) print img.info # {}
pillow支持的模式表
模式 | 说明 |
---|---|
1 | 1位像素,黑白,每字节一个像素存储 |
l | 8位像素,黑白 |
p | 8位像素,使用调色板映射到任何其他模式 |
rgb | 3x8位像素,真彩色 |
rgba | 4×8位像素,带透明度掩模的真彩色 |
cmyk | 4x8位像素,分色 |
ycbcr | 3x8位像素,彩色视频格式 |
lab | 3×8位像素,l * a * b颜色空间 |
hsv | 3x8位像素,色调,饱和度,值颜色空间 |
i | 32位有符号整数像素 |
f | 32位浮点像素 |
上一篇: 两腿依然不停的颤抖