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 相关文章推荐
详解Python中的装饰器、闭包和functools的教程
Apr 02 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
Jul 24 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
Dec 07 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
Jan 08 Python
pandas数据拼接的实现示例
Apr 16 Python
Python中Selenium库使用教程详解
Jul 23 Python
Python rabbitMQ如何实现生产消费者模式
Aug 24 Python
利用python进行数据加载
Jun 20 Python
Python 一键获取电脑浏览器的账号密码
May 11 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
无线电的诞生过程
2021/03/01 无线电
php入门学习知识点六 PHP文件的读写操作代码
2011/07/14 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
php文件包含的几种方式总结
2019/09/19 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
JavaScript window.document的属性、方法和事件小结
2012/10/24 Javascript
javascript 回调函数详解
2014/11/11 Javascript
jQuery中height()方法用法实例
2014/12/24 Javascript
jQuery中noConflict()用法实例分析
2015/02/08 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
2018/07/13 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
JS代码优化的8点建议
2020/02/04 Javascript
解决pycharm双击但是无法打开的情况
2020/10/31 Javascript
Python操作json数据的一个简单例子
2014/04/17 Python
python使用正则表达式替换匹配成功的组
2017/11/17 Python
python中字符串的操作方法大全
2018/06/03 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
python将一个英文语句以单词为单位逆序排放的方法
2018/12/20 Python
python lxml中etree的简单应用
2019/05/10 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
印尼值得信赖的在线交易网站:Bukalapak
2019/03/11 全球购物
物业保安主管岗位职责
2013/12/25 职场文书
医院办公室主任职责
2013/12/29 职场文书
初中音乐教学反思
2014/01/12 职场文书
信息技术培训感言
2014/03/06 职场文书
关于读书的演讲稿600字
2014/08/27 职场文书
员工年度工作总结2015
2015/05/18 职场文书
医疗纠纷调解协议书
2015/08/06 职场文书
初中班主任心得体会
2016/01/07 职场文书
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang