$ pip install Pillow
或
$ sudo apt-get install python-imaging
二值图像,非黑即白,每个像素存储为8bit,0为黑,255为白。
灰度图像,每个像素存储为8bit,0为黑,255为白。从RGB转为L的公式为:
L = (299R+587G+114B)/1000 (取整数)
彩色图像,每个像素存储为8bit,色值从调色板中查询(使用调色板映射到其它模式)。
真彩色图像,每个像素存储为3×8bit,依次用8bit表示红、绿、蓝通道。
有透明通道的真彩色图像,每个像素存储为4×8bit,依次为红、绿、蓝、透明通道,255表示完全不透明。
彩色图像,每个像素存储为4×8bit,依次为Cyan青、Magenta品红、Yellow黄、黑KeyPlate,即印刷三原色加黑色。
C=255-R, M=255-G, Y=255-B, K=0
彩色视频,每个像素存储为3×8bit,依次为Y亮度、Cb蓝色色度、Cr红色色度。
Y = 0.257R+0.504G+0.098B+16
Cb = -0.148R-0.291G+0.439B+128
Cr = 0.439R-0.368G-0.071B+128
整型灰度图像,每个像素存储为32bit,0为黑,255为白。公式同“L”。
浮点灰度图像,每个像素存储为32bit,0为黑,255为白。公式同“L”。
向RGB转换时,1、L、I、F直接将色值复制为三通道,P通过逆向查询RGB值,RGBA、CMYK丢弃第四通道,YCbCr按照公式进行转换。
[TOP]
from PIL import Image
lena.format
: 图像格式,由PIL创建的图像为None。
lena.mode
: 图像模式。
lena.size
: 元组(w, h)。
lena.palette
: “P”模式下的palette实例或None。
lena.info
: 字典,包含图像属性信息。
Image.new("RGB", (128,128), "#FF0000")
: 创建128×128的红色图像,color为十六进制色符,或red、blue等颜色,默认为0。
Image.open('filepath/filename', 'r')
: 打开图像,mode必须为’r’或不设置。
Image.blend(lena_1, lena_2, alpha)
: 叠加图像,alpha为透明度,当alpha=0时为lena_1,alpha=1时为lena_2,计算公式为:lena_1×(1.0-alpha)+lena_2×alpha。
Image.composite(lena_1, lena_2, mask)
: 叠加图像,mask为蒙版图像,作为透明度,其模式可为1、L或RGBA。
Image.eval(lena, fun)
: 使用fun函数处理lena中的每一个像素,若有多个通道,每个通道值都会处理一次,如:
def fun(x):
return x*0.5
Image.eval(lena, fun)
Image.merge("RGB", lena)
: 使用单通道创建图像,如:
r1, g1, b1 = lena_1.split()
r2, g2, b2 = lena_2.split()
lena = [r1, g2, b2] # 或(r1, g2, b2)
Image.merge("RGB", lena)
lena.convent(mode)
: 将图片转换为mode模式。
lena.convent(mode, [dither|palette|colors])
: 使用调色板的转换。
lena.convent("L|RGB", matrix)
: 带矩阵的模式转换,只适用于L或RGB图像,matrix为4~16元组。
lena.copy()
: 复制图像。
lena.crop(box)
: 裁剪box区域,box=(x0, y0, x1, y1)。PIL使用笛卡尔像素坐标系统,坐标(0, 0)位于左上角。注意:坐标值表示像素的角;位于坐标(0, 0)处的像素的中心实际上位于(0.5, 0.5)。
lena.draft(mode, size)
: 按照给定的模式和尺寸修改原图。
lena.filter(FILTER)
: 使用FILTER过滤器,详细用法可查看ImageFilter模块文档。
lena.getbands()
: 返回类似于(“R”, “G”, “B”)的元组。
lena.getbbox()
: 返回一个元组(x0, y0, x1, y1),包围非零像素区域。
lena.getcolors(maxcolors)
: 返回一个列表,元素是元组(count, color),包含了图像中的所有颜色。maxcolors默认为256,若超出则返回空。
lena.getextrema()
: 返回类似于((0, 255), (0, 254), (0, 255))三通道的极值。
lena.getpixel((x, y))
: 返回(x, y)处的像素信息。
lena.histogram()
: 返回一个直方图的列表,值为像素数量。
lena.paste(image, box)
: 将image粘贴到lena上,box为空(即(0, 0))或二元组或四元组;image的模式会转换为lena的模式。
lena.paste(color, box)
: 纯色填充,对于单通道的lena,color为单值,对于多通道的lena,color为一个元组。
lena.paste(image, box, mask)
: 将image作为蒙板粘贴,其模式可为1、L或RGBA,若mask为0,则image完全透明,若mask为255,则image完全不透明。
lena.paste(color, box, mask)
: 纯色蒙板覆盖。
lena.point(table|function, mode)
: 按照table或function处理每个像素点。
lena.putalpha(band)
: 将给定的通道复制到alpha层,lena必须为RGBA,band必须为L或1模式的图像或一个整数的颜色值。
lena.putpixel((x, y), (r, g, b))
: 修改(x, y)处的像素值。
lena.resize(size, filter)
: size是一个二元组(w, h);filter为NEAREST, BILINEAR, BICUBIC, ANTIALIAS之一,默认为NEAREST。
lena.rotate(angle, filter=NEAREST, expand=0)
: angle为顺时针旋转;若expand为1(True)则输出图像大小会自动调整;若expand为0(False),则图像保持原大小,默认为1。
lena.save(outfile, format, options)
: 若不指定format,则根据文件名判断格式。
lena.seek(frame)
: frame为帧数,即查找gif的第n帧。
lena.show()
: *nix中保持为ppm文件,调用xv显示,win中保持为bmp文件。
lena.split()
: 返回一个元组,由各通道组成,可用于将单个通道形成一个图像。
lena.tell()
: 返回当前帧位置,从0开始计算。
lena.thumbnail(size, filter)
: 返回缩略图(直接修改原图)。
lena.tobitmap()
: 返回转换为X11的bitmap图像。
lena.tostring()
: 返回一个标准raw编码的字符串。
lena.transform(size, method, data, filter)
: method包括裁剪(EXTENT)、仿射(AFFINE)、拉伸(QUAD)、映射(MESH)、透视(PERSPECTIVE),如:
lena.transform((300, 300), Image.PERSPECTIVE, (1, 2, 3, 2, 1, 6, 1, 2))
lena.tanspose(method)
: method包括FLIP_LEFT(RIGHT, TOP, BOTTOM), ROTATE_90(180, 270)。
lena.verify()
: 检查文件是否损坏。
[TOP]
from PIL import ImageFilter
ImageFilter.BLUR
: 模糊,如lena.filter(ImageFilter.BLUR)
。
ImageFilter.CONTOUR
: 提取轮廓信息。
ImageFilter.DETAIL
: 细节增强,突出图像中的细节。
ImageFilter.EDGE_ENHANCE
: 边缘增强,突出、加强、改善不同灰度区域之间的边界和轮廓。
ImageFilter.EDGE_ENHANCE_MORE
: 深度边缘增强。
ImageFilter.EMBOSS
: 浮雕。
ImageFilter.FIND_EDGES
: 寻找边缘信息。
ImageFilter.SMOOTH
: 平滑,突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频成分,使图像亮度平缓渐变,减小突变梯度。
ImageFilter.SMOOTH_MORE
: 深度平滑。
ImageFilter.SHARPEN
: 锐化,补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像更清晰。
ImageFilter.Kernel(size, kernel, scale=None, offset=0)
: 生成一个(size×size)的卷积核,size可取3或5,对应的kernel为9或25个整数或浮点数的序列。如果设置了scale,卷积核作用于每个像素值之后的数据需要除以scale;如果设置了offset,该值将加到卷积核作用的结果上,再除以scale。如:
lena.filter(ImageFilter.Kernel((3,3), (1,1,1,0,0,0,2,0,2)))
ImageFilter.RankFilter(size, rank)
: 对图像中以某个像素点为中心的(size×size)区域中的像素值进行排序,选择第rank的像素值更新当前像素点。
ImageFilter.MinFilter(size=3)
: 从图像中以某个像素点为中心的(size×size)区域中选择最小的像素值更新当前像素点。
ImageFilter.MedianFilter(size=3)
: 从图像中以某个像素点为中心的(size×size)区域中选择所有像素的中值更新当前像素点。
ImageFilter.MaxFilter(size=3)
: 从图像中以某个像素点为中心的(size×size)区域中选择最大的像素值更新当前像素点。
ImageFilter.ModeFilter(size=3)
: 从图像中以某个像素点为中心的(size×size)区域中选择出现次数最多的像素值更新当前像素点,如果所有像素出现频率相同,则使用原始像素值。
[TOP]
from PIL import ImageDraw
ImageDraw.Draw(lena)
: 创建一个可以在给定图像上绘图的对象。
draw = ImageDraw.Draw(lena)
draw.line((0,0)+lena.size, fill=128)
draw.line((0,lena.size[1],lena.size[0],0),fill=128)
lena.show()
del draw
draw.arc(xy, start, end, options)
: 绘制圆弧,xy通过四元组指定区域,satrt和end是顺时针旋转的起讫角度,水平向右为0度,options的outline指定线条颜色。
draw.bitmap(xy, bitmap, options)
: 绘制bitmap对应的位图,非零部分使用options的fill指定的值来填充。bitmap位图是一个透明模板(模式为1)或蒙版(模式为L或RGBA)。与Image.paste(xy, color, bitmap)功能相同。
draw.chord(xy, start, end, options)
: 绘制弦。xy通过四元组指定区域,satrt和end是顺时针旋转的起讫角度,水平向右为0度,options的outline指定轮廓颜色,fill指定填充颜色。
draw.ellipse(xy, options)
: 绘制椭圆。xy通过四元组指定区域,options的outline指定轮廓颜色,fill指定填充颜色。
draw.line(xy, options)
: 绘制直线。xy指定端点坐标,至少包括2个坐标值,options的fill指定线的颜色,width指定线的宽度。
draw.pieslice(xy, start, end, options)
: 绘制扇形。xy通过四元组指定区域,satrt和end是顺时针旋转的起讫角度,水平向右为0度,options的fill指定填充颜色。
draw.point(xy, options)
: 绘制点。xy指定坐标,options的fill指定颜色。
draw.polygon(xy, options)
: 绘制多边形。xy指定顶点坐标,至少包括3个坐标值,options的fill指定多边形的填充颜色。
draw.rectangle(box, options)
: 绘制长方形。box指定长方形左上角和右下角的坐标值,options的fill指定长方形的填充颜色。如:
draw.rectangle((0,0,100,100), fill=(255,0,0))
draw.text(xy, string, options)
: 绘制文本。xy指定文本左上角的位置,options的font用于指定字体,需要使用ImageFont模块的load()方法从文件中加载,options的fill指定文本的颜色。
draw.textsize(string, options)
: 返回字符串的大小,以像素为单位。options的font用于指定字体,需要使用ImageFont模块的load()方法从文件中加载。
[TOP]
import PIL import ImageColor
十六进制色符, 如#f00, #ff0000等。
ImageColor.rgb(r, g, b)
, rgb的取值为[0,255]或[0%,100%]。
ImgaeColor.hsl(h, s%, l%)
, Hue-Saturation-Lightness函数,h取值范围[0, 360],用一个角度表示颜色(red=0, green=120, blue=240),h取值[0, 100],表示饱和度(gray=0%, full color=100%),l取值[0, 100],表示亮度(black=0%, normal=50%, white=100%)。
通用html颜色名称: 140个标准颜色名称。
ImageColor.getrgb(color)
: 返回(r, g, b)。
ImageColor.getcolor(color, mode)
: 返回(r, g, b)或一个整数。
[TOP]