设为首页 - 加入收藏 大大分享网_阜阳站长网 (http://www.0558zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 小米 Note 用户
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

Python帮你微信头像任意添加装饰,别再@微信官方了!

发布时间:2019-09-26 00:16 所属栏目:[优化] 来源:王翔
导读:@微信官方 昨天朋友圈刷爆了@微信官方的梗,从起初的为头像添加国旗,到最后的各种Book思议的需求而我呢?@了辣么辣么多的奥特曼,结果还是加班到12点多最后想想,人还是得靠自己吧,@我自己吧 昨天最近每晚加班回家都凌晨了,昨晚因为太累没更新,今天再不

Python帮你微信头像任意添加装饰,别再@微信官方了!

?@微信官方

昨天朋友圈刷爆了@微信官方的梗,从起初的为头像添加国旗,到最后的各种Book思议的需求…而我呢?@了辣么辣么多的奥特曼,结果还是加班到12点多…最后想想,人还是得靠自己吧,@我自己吧…

Python帮你微信头像任意添加装饰,别再@微信官方了!

昨天最近每晚加班回家都凌晨了,昨晚因为太累没更新,今天再不更新感觉有点太对不起大家,所以想想今天就学着@微信官方,用Python给我们的微信头像添加国旗吧!

说说上篇文章

上篇文章如何把图片变得炫酷多彩,Python教你这样实现!,其实也是讲关于图片拼接的内容,只是有些朋友私下微信和我说,分块加载的方式不够好看,看着像是因为网速不好而一点点显示的效果。其实,文章只是给大家提供一个思路,你可以根据自己的算法去优化图片内容的加载方式,比如这样随即加载的模式:

Python帮你微信头像任意添加装饰,别再@微信官方了!

当然你还可以转圈等等…

很多朋友问,Python应该怎么学习才上手快。其实学编程不管什么语言都是如出一辙的方式,多练习勤动手!当你不知道该写什么的时候,自己给自己找一点练习的idea,相信你的python会学的更快且更有趣…

头像添加国旗

今天微信添加国旗的活动,最终我也不知道@微信官方到底有没有用,上班一天忙着填坑,没什么时间玩手机。到时看朋友发有的链接可以给微信加头像,但晚上发现链接失效了。想想既然上篇文章做了关于图片剪裁粘贴的文章,为何不用Python给自己的头像添加一个国旗呢?

  • 图片堆叠

python默认创建的图片都是矩形的,这样直接把矩形图片加到微信的头像上,实在太丑了!就比如搜到的一篇文章:

通过Python给头像加国旗,10多行代码搞定,就别@官方了

Python帮你微信头像任意添加装饰,别再@微信官方了!

这种添加没毛病,但不觉得有点丑么…该怎么做才能美化呢?先来看看效果图:

Python帮你微信头像任意添加装饰,别再@微信官方了!

大家觉得以上两种图片,哪个梗好看呢?哈哈…

  • 特效分析

看似两张图差别不太,其实技术处理上,相差还是很多的。

首先,我们准备一张用来添加的图标,就像这样:

Python帮你微信头像任意添加装饰,别再@微信官方了!

程序支持你添加任意的图标来绘图,只需要更换icon.png的名字即可,比如我换成东京食尸鬼的金木,是不是很炫酷:

Python帮你微信头像任意添加装饰,别再@微信官方了!

其次,最外层不起眼的一圈留白,为了达到这个效果,我们需要先创建一个白色的背景画布,然后将我们的头像居中粘贴上去。

之后,是如何生成一个圆形的图片,大家知道默认创建的图片都是矩形的,我们需要通过RGBA的透明度,将多余的边角进行透明处理。

最终代码如下:

  1. #?-*-?coding:?utf-8?-*-?
  2. #?@Author???:?王翔?
  3. #?@WeChat???:?King_Uranus?
  4. #?@公众号????:?清风Python?
  5. #?@Date?????:?2019/9/23?23:08?
  6. #?@Software?:?PyCharm?
  7. #?@version??:Python?3.7.3?
  8. #?@File?????:?NationalFlag.py?
  9. ?
  10. ?
  11. import?os?
  12. import?argparse?
  13. from?PIL?import?Image?
  14. ?
  15. BasePath?=?os.path.dirname(os.path.realpath(__file__))?
  16. ?
  17. ?
  18. class?NationalFlag:?
  19. ????def?__init__(self):?
  20. ????????self.border?=?30?
  21. ????????self.user_picture_size=None?
  22. ????????self.picture,?self.picture_size?=?self.sharpe_image(args.picture.replace('\\',?'/'),?'user_picture')?
  23. ????????self.icon,?self.icon_size?=?self.sharpe_image(os.path.join(BasePath,?'icon.png'))?
  24. ?
  25. ????def?sharpe_image(self,?picture_path,?img_type=None):?
  26. ????????image?=?Image.open(picture_path).convert("RGBA")?
  27. ????????size?=?min(image.size)?
  28. ????????if?not?img_type:?
  29. ????????????size?=?240?
  30. ????????image?=?image.resize((size,?size),?Image.ANTIALIAS)?
  31. ????????reset_picture?=?self.blank_image(size,?img_type)?
  32. ????????if?not?img_type:?
  33. ????????????pimage?=?image.load()??#?像素的访问对象?
  34. ????????????preset_picture?=?reset_picture.load()?
  35. ????????????r?=?float(size?/?2)??#?圆心横坐标?
  36. ????????????r3?=?int(size?//?2)?
  37. ????????????for?i?in?range(size):?
  38. ????????????????for?j?in?range(size):?
  39. ????????????????????lx?=?abs(i?-?r)??#?到圆心距离的横坐标?
  40. ????????????????????ly?=?abs(j?-?r)??#?到圆心距离的纵坐标?
  41. ????????????????????l?=?(pow(lx,?2)?+?pow(ly,?2))?**?0.5??#?三角函数?半径?
  42. ????????????????????if?l?
  43. ????????????????????????preset_picture[i?-?(r?-?r3),?j?-?(r?-?r3)]?=?pimage[i,?j]?
  44. ????????else:?
  45. ????????????reset_picture.paste(image,?(self.border,?self.border))?
  46. ?
  47. ????????return?reset_picture,?size?
  48. ?
  49. ????def?blank_image(self,?size,?img_type=None):?
  50. ?
  51. ????????if?img_type:?
  52. ????????????new_size?=?size?+?self.border?*?2?
  53. ????????????color_type?=?(255,?255,?255)?
  54. ????????????return?Image.new('RGBA',?(new_size,?new_size),?color_type)?
  55. ????????else:?
  56. ????????????color_type?=?(255,?255,?255,?0)?
  57. ????????????return?Image.new('RGBA',?(size,?size),?color_type)?
  58. ?
  59. ????def?final_paste(self):?
  60. ????????r,?g,?b,?a?=?self.icon.split()?
  61. ????????locate?=?self.picture_size+?self.border//2?-self.icon_size?
  62. ????????self.picture.paste(self.icon,?(locate,?locate),?mask=a)?
  63. ????????self.picture.save('result.png')?
  64. ?
  65. ?
  66. def?run():?
  67. ????main?=?NationalFlag()?
  68. ????main.final_paste()?
  69. ?
  70. ?
  71. if?__name__?==?'__main__':?
  72. ????parser?=?argparse.ArgumentParser()?
  73. ????parser.add_argument("-p",?"--picture",?required=True,?
  74. ????????????????????????help="请填写所需制作的图片全路径")?
  75. ????args?=?parser.parse_args()?
  76. ????run()?

程序打包

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章