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


Posted in Python onSeptember 25, 2019

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

@微信官方

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

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

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

说说上篇文章

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

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

当然你还可以转圈等等…

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

头像添加国旗

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

图片堆叠

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

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

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

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

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

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

特效分析

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

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

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

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

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

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

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

最终代码如下:

# -*- coding: utf-8 -*- 
# @Author : 王翔 
# @WeChat : King_Uranus 
# @公众号 : 清风Python 
# @Date  : 2019/9/23 23:08 
# @Software : PyCharm 
# @version :Python 3.7.3 
# @File  : NationalFlag.py 
import os 
import argparse 
from PIL import Image 
BasePath = os.path.dirname(os.path.realpath(__file__)) 
class NationalFlag: 
 def __init__(self): 
  self.border = 30 
  self.user_picture_size=None 
  self.picture, self.picture_size = self.sharpe_image(args.picture.replace('\\', '/'), 'user_picture') 
  self.icon, self.icon_size = self.sharpe_image(os.path.join(BasePath, 'icon.png')) 
 def sharpe_image(self, picture_path, img_type=None): 
  image = Image.open(picture_path).convert("RGBA") 
  size = min(image.size) 
  if not img_type: 
   size = 240 
  image = image.resize((size, size), Image.ANTIALIAS) 
  reset_picture = self.blank_image(size, img_type) 
  if not img_type: 
   pimage = image.load() # 像素的访问对象 
   preset_picture = reset_picture.load() 
   r = float(size / 2) # 圆心横坐标 
   r3 = int(size // 2) 
   for i in range(size): 
    for j in range(size): 
     lx = abs(i - r) # 到圆心距离的横坐标 
     ly = abs(j - r) # 到圆心距离的纵坐标 
     l = (pow(lx, 2) + pow(ly, 2)) ** 0.5 # 三角函数 半径 
     if l < r3: 
      preset_picture[i - (r - r3), j - (r - r3)] = pimage[i, j] 
  else: 
   reset_picture.paste(image, (self.border, self.border)) 
  return reset_picture, size 
 def blank_image(self, size, img_type=None): 
  if img_type: 
   new_size = size + self.border * 2 
   color_type = (255, 255, 255) 
   return Image.new('RGBA', (new_size, new_size), color_type) 
  else: 
   color_type = (255, 255, 255, 0) 
   return Image.new('RGBA', (size, size), color_type) 
 def final_paste(self): 
  r, g, b, a = self.icon.split() 
  locate = self.picture_size+ self.border//2 -self.icon_size 
  self.picture.paste(self.icon, (locate, locate), mask=a) 
  self.picture.save('result.png') 
def run(): 
 main = NationalFlag() 
 main.final_paste() 
if __name__ == '__main__': 
 parser = argparse.ArgumentParser() 
 parser.add_argument("-p", "--picture", required=True, 
      help="请填写所需制作的图片全路径") 
 args = parser.parse_args() 
 run()

程序打包

这么好玩的功能,我们当然需要打包后方便传递给朋友们使用喽…头像图片通过-p 传输至程序,想要替换的装饰秩序保证文件名为icon.jpg即可。是不是很方便?还不去下载吗?公众号输入关键字:头像 即可获取exe文件及代码….

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

总结

以上所述是小编给大家介绍的Python帮你微信头像任意添加装饰别再@微信官方了,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python3基础之输入和输出实例分析
Aug 18 Python
浅谈Python爬取网页的编码处理
Nov 04 Python
python中关于for循环的碎碎念
Jun 30 Python
python获取中文字符串长度的方法
Nov 14 Python
Django项目中添加ldap登陆认证功能的实现
Apr 04 Python
对django2.0 关联表的必填on_delete参数的含义解析
Aug 09 Python
python科学计算之narray对象用法
Nov 25 Python
python单向循环链表原理与实现方法示例
Dec 03 Python
tensorflow 只恢复部分模型参数的实例
Jan 06 Python
python实现全排列代码(回溯、深度优先搜索)
Feb 26 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
May 03 Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 21 Python
python异步编程 使用yield from过程解析
Sep 25 #Python
手机使用python操作图片文件(pydroid3)过程详解
Sep 25 #Python
Python缓存技术实现过程详解
Sep 25 #Python
Laravel框架表单验证格式化输出的方法
Sep 25 #Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
Sep 25 #Python
python 用户交互输入input的4种用法详解
Sep 24 #Python
python getpass实现密文实例详解
Sep 24 #Python
You might like
Amazon Prime Video平台《无限住人 -IMMORTAL-》2020年开始TV放送!
2020/03/06 日漫
php REMOTE_ADDR之获取访客IP的代码
2008/04/22 PHP
一个PHP缓存类代码(附详细说明)
2011/06/09 PHP
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
PHP编程中的常见漏洞和代码实例
2014/08/06 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
2016/03/15 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
Jquery ThickBox插件使用心得(不建议使用)
2010/09/08 Javascript
JavaScript实现快速排序(自已编写)
2012/12/19 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
jQuery中[attribute*=value]选择器用法实例
2014/12/31 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
关于jQuery.ajax()的jsonp碰上post详解
2017/07/02 jQuery
详解如何使用 vue-cli 开发多页应用
2017/12/16 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
vue实现移动端H5数字键盘组件使用详解
2020/08/25 Javascript
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
python 数据的清理行为实例详解
2017/07/12 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
Python 获取项目根路径的代码
2019/09/27 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
英国复古服装购物网站:Collectif
2019/10/30 全球购物
学生励志演讲稿
2014/01/06 职场文书
法律进机关实施方案
2014/03/12 职场文书
预防传染病方案
2014/06/14 职场文书