首先,当看到朋友圈被刷屏@微信官方时,就已经意识到又是一波套路了,记得之前有在头像右下角加会员 V 符号的、还有之前圣诞节加圣诞帽的。同时看到确实很多朋友头像已经加了小国旗了,还挺好看的,必须整一个。
最高效的还是直接搜索,去百度了下微信官方加国旗(至于为啥百度,因为另一个挂了上不去了。。),得到了活动的 h5 链接,很顺利地给自己头像加了小国旗。
接下来,就是程序员思维了,它是怎么实现的呢?注意看这个活动链接的图片:
当我们登陆后,头像并不是被嵌入,而是被这个带国旗的白框直接覆盖贴上去的:
换句话说,只要我拿到了这个设计好的“国旗头像框”,将其中间掏空,缩放至头像同尺寸,直接贴到头像上就可以了。
那么问题来了,如何掏空这个头像框图片呢?我尝试电脑端去这个网页下载原图,没成功,只好从生成的图像入手。
用修图软件中的魔棒工具选中白色边框:
再进行反向选择定位到头像和国旗:
接下来将头像内容直接删除,保存成 PNG 格式,即可得到中间透明的国旗头像框了~
拿到国旗头像框,接下来就是比较容易操作的贴图,这里注意是贴中间透明的 PNG 图,之前我在赛亚人代码里用到过,当时用的 PIL 模块进行处理的。
这里仍然故技重施:
from PIL import Image
# 找到头像和头像框图
head = "ted.jpeg"
logo = "add.png"
# 打开头像
source = Image.open(head)
# 打开国旗头像框
add = Image.open(logo)
# 缩放国旗头像框
mod_add = add.resize(source.size)
# 贴图
source.paste(mod_add,(0,0),mod_add)
# 保存
source.save("final.png")
在导入 PIL 模块后,以上就是全部实现代码,非常简单。要注意的就是贴图时 paste 函数里的第三个参数,就是为了保证贴图时保持 PNG 的透明性。
再回顾整个过程,貌似麻烦的反倒是用修图软件来获取这个头像国旗框。
反思:
1. 写完代码,自觉得不太够看,因为人家一个链接登陆一下就能获取头像了,为什么还要麻烦兮兮地折腾这一圈?
不妨换一种思维,这其实是腾讯有这个链接,以引爆朋友圈的方式在做推广,前提是人家已经做好这个“产品”了。我们现在闲暇之余完全可以跟着学学怎么来创造一款“产品”嘛。
2. 目前体验下来,Python 代码实现起来并不省事,因为除了准备头像框,还要获取头像,这个如果想优化,可以调微信接口直接获取头像来做处理;目前推出来的 h5 链接呢,确实简单易操作,挺好。
但是,还有种思路:微信小程序。微信小程序同样可以登陆直接拿到头像,而且也是现成的平台,开发不比 h5 复杂多少,甚至可以借势推广一波,为什么没放到小程序里来做这个推广呢?
这个我暂时没想通,也打算近期尝试在小程序实现下这个功能。
以上,感谢阅读~
PS:中午写完代码时想着等晚上下班了发一下这篇文章,结果下午一瞅, Crossin 老大已经捷足先登了,不过还好他用的 opencv,没撞,哈哈
文中代码和头像框素材已经传到 GitHub,链接在置顶留言;同时也附上 Crossin 老大的实现文章哈~