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