python pil 使用心得小结

1、打开图片为 image 示例:
im_ins = Image.open(‘c:\xxxx.pn’)

2、对这个图片进行缩放:

size = (160,160)
im_ins.thumbnail(size , Image.ANTIALIAS)

3、转换为RGBA,这个尤其重要,需要在多个png图层拼接前转一下,不然会出现丢色的情况

im_ins=faceIm.convert(“RGBA”)

4、将图片根据某一个角度旋转,因为pil的角度是逆时针的,所以需要乘以-1

im_ins = im_ins.rotate( 30 * -1, expand=1 )

5、将拼接或者缩放的图片保存为文件

im_ins.save(‘c:\xxx.png’)

6、拼接,将 图层2 放置于 图层1 上,有2种方式

第一种使用 paste 方式,这种方式比较灵活,可以对layer2相对于layer1左上角进行偏移放置,但是也有一个比较突出的弱点,如果layer2是半透明的,比如透明度50%这样的png,用这种方式拼接,会将layer1被layer2覆盖的那部分也变成50%透明

layer1.paste(layer2, (0, 0), layer2)

第二种使用 Image.alpha_composite 进行拼接,这种方式可以解决上面paste的半透明问题,但是要保证 layer1和layer2的尺寸和模式一样,无法进行偏移

new_layer= Image.alpha_composite(layer1, layer2)

7、对png进行填色,或替换部分某一种颜色,方法比较笨,一个个像素匹配,如果发现颜色匹配就将他替换掉。

下面这个方法就是将非透明的png图片部分都替换成某一种颜色

def fillTransparentColor(self, imIns, color):
im =imIns.convert(“RGBA”)
pixData = im.load()
for y in xrange(im.size[1]):
for x in xrange(im.size[0]):
if pixData[x, y][3] != 0: # == (255, 255, 255, 255):
pixData[x, y] = color
return im