python图像处理-个性化头像

寵の児 提交于 2021-02-18 04:04:08



前言

本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装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学习之路


往期精彩回顾




python图像处理-字符画风格图片
python图像处理-实现验证码图片(上)
python图像处理-图片裁剪


长按二维码,

加关注!

叶子陪你玩




本文分享自微信公众号 - 叶子陪你玩编程()。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!