前言
本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地方也欢迎指出,在此先行谢过。
前言
很多时候我们都想要一个专属的头像表现,除了图像内容外不同,形状不一样,下面我就来说说如何使用python来实现个性化头像。
下面的圆形头像和牛角头像都是我使用python实现的,接下来我将通过讲解这个实现的过程,给大家带来一些想法。
实现原理
我们可以看到原来图片是方正的,通过处理后,图像形状外的地方都变成白色,这里实际上是透明,上面第三幅图可以帮助我们理解。
我们的处理过程其实就是将原来的图片变成RGBA格式,RGB是红绿蓝三种颜色,这里的A就是透明通道的意思,A的取值范围是从0-255之间变化,当A设置为0时,完全透明,255时完全不透明。
下面蓝色圆形,可以看到透明度越高,自身的颜色就变淡了,底部的文字就看的更清楚了,如果100%透明,圆形就会消失不存在了。
回到我们上面原来的猫图片,只要我们能够将猫图像的圆形区外的所有地方变成完全透明(看不见了),那么整个图片就变成圆形的了。
这里如果自己去计算圆形的边界,圆形外侧全部设置为完全透明,圆形内容不变,一个个像素点去处理,那将会非常麻烦,牛角的就更不用想了。
在PIL库里面,提供了两种方法帮助我们去解决这个问题,第一种是使用Image.putalpha方法;第二种是使用Image.paste蒙版粘贴图片的方法。
putalpha方法代码实现
这里的putalpha正常里面是放入一个0-255的数字的,表示要将这整张图片设置为透明度为多少,这是方式对于整张图片都更改透明度非常方便,但是对于更改局部或者特定形状部分的透明度就不行了;这里使用另外一种方式,传入一张灰度图模式的圆形图片(灰度图是黑白图片,灰度0是显示黑色的,灰度255是显示白色的),猫的圆形外的透明度就被设置成黑色所代表的数值0,而0在透明度中是表示完全透明的,最终猫的圆外就变成透明了,里面白色部分不透明显示出一个圆形。
上面是通过自己绘制一个图片来实现的,如果要实现一个牛角的,可能自己不会绘制,那可以去找一个现成的。
下面我就找了一张牛角图片,但是牛角是黑色的,外部是白色的,这个出来的效果是下面这样的。
显示出的效果不符合我的要求,我想要的是中间是牛角,周围是透明的,下面利用PIL的ImageOps方法先进行反色处理,把白的变成黑,黑的地方变成白,其它步骤不变。
paste方法代码实现
上面是使用putalpha方法实现的,下面再来看看如何使用paste方法如何实现。paste是粘贴的意思,如果后面没有第三个,那么就是在某个位置粘贴一张图片,最后的效果如下。
上面的效果并不是我们想要的,paste除了上面两个参数,还有第三个参数蒙版图像,这里要注意蒙版图像和putalpha的图像有所区别,中间是黑色,边缘是白色;因为蒙版的运行原理是,灰度图黑色时数值是0,表示透明度就是完全透明的意思,白色数值是255,表示透明图是完全不透明,所以整个效果就是黑色部分会透明显示出下面一层的猫,而白色部分不透明也就保留原来效果。
可优化方向
上面的图片边缘还有锯齿,也就是不够工整,但是影响不大,这个可以自己尝试再去优化调整一下。
(全文完)
欢迎转载,转载请注明出处!欢迎关注公众微信号:叶子陪你玩编程 分享自己的python学习之路
往期精彩回顾
长按二维码,
加关注!
叶子陪你玩
本文分享自微信公众号 - 叶子陪你玩编程()。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4579119/blog/4343627