上面的代码将region图像粘贴到左上角为(100,100)的位置。region是要粘贴的Image对象,box是要粘贴的位置,可以是一个两个元素的元组,表示粘贴区域的左上角坐标,也可以是一个四个元素的元组,表示左上角和右下角的坐标。如果是四个元素元组的话,box的size必须要和region的size保持一致,否则将会被convert成和region一样的size。
split()(颜色通道分离)
>>> r,g,b = im.split() >>> r.show() >>> g.show() >>> b.show()split()方法可以原来图像的各个通道分离,比如对于RGB图像,可以将其R,G,B三个颜色通道分离。
merge(mode,channels)(颜色通道合并)
>>> im_merge = Image.merge("RGB",[b,r,g]) >>> im_merge.show()merge方法和split方法是相对的,其将多个单一通道的序列合并起来,组成一个多通道的图像,mode是合并之后图像的模式,比如"RGB",channels是多个单一通道组成的序列。
resize(size,resample,box)
>>> im_resize = im.resize((200,200))
>>> im_resize
<PIL.Image.Image image mode=RGB size=200x200 at 0x7F715B19CCF8>
>>> im_resize.show()
>>> im_resize_box = im.resize((100,100),box = (0,0,50,50))
>>> im_resize_box.show()
resize方法可以将原始的图像转换大小,size是转换之后的大小,resample是重新采样使用的方法,仍然有Image.BICUBIC,PIL.Image.LANCZOS,PIL.Image.BILINEAR,PIL.Image.NEAREST这四种采样方法,默认是PIL.Image.NEAREST,box是指定的要resize的图像区域,是一个用四个元组指定的区域(含义和上面所述box一致)。
convert(mode,matrix,dither,palette,colors)(mode转换)
>>> im_L = im.convert("L") >>> im_L.show() >>> im_rgb = im_L.convert("RGB") >>> im_rgb.show() >>> im_L.mode 'L' >>> im_rgb.mode 'RGB'convert方法可以改变图像的mode,一般是在'RGB'(真彩图)、'L'(灰度图)、'CMYK'(压缩图)之间转换。上面的代码就是首先将图像转化为灰度图,再从灰度图转化为真彩图。值得注意的是,从灰度图转换为真彩图,虽然理论上确实转换成功了,但是实际上是很难恢复成原来的真彩模式的(不唯一)。
filter(filter)(应用过滤器)
>>> im = Image.open("niuniu.jpg","r") >>> from PIL import ImageFilter >>> im_blur = im.filter(ImageFilter.BLUR) >>> im_blur.show() >>> im_find_edges = im.filter(ImageFilter.FIND_EDGES) >>> im_find_edges.show() >>> im_find_edges.save("linuxidc.jpg") >>> im_blur.save("linuxmi.jpg")filter方法可以将一些过滤器操作应用于原始图像,比如模糊操作,查找边、角点操作等。filter是过滤器函数,在PIL.ImageFilter函数中定义了大量内置的filter函数,比如BLUR(模糊操作),GaussianBlur(高斯模糊),MedianFilter(中值过滤器),FIND_EDGES(查找边)等。如下图1所示:
图1
point(lut,mode)(对图像像素操作)
>>> im_point = im.point(lambda x:x*1.5) >>> im_point.show() >>> im_point.save("linuxidc.jpg")point方法可以对图像进行单个像素的操作,上面的代码对point方法传入了一个匿名函数,表示将图像的每个像素点大小都乘以1.5,mode是返回的图像的模式,默认是和原来图像的mode是一样的。图2是原来的dog.jpg和point操作之后的im_point.jpg之间的对比。
图2 niuniu.jpg和point操作之后的linuxidc.jpg