表情包是当代社交生态中的战略性武器,既托起了友情的小船,又浮起了爱情的巨轮,还载起了亲情的航空母舰。 在一个又一个宁静又不乏躁动的夜晚,此起彼伏的“老铁666”、“顶你上去”掀起了一阵又一阵的波澜。 当你和别人斗图斗得天昏地暗、地动山摇的时候,你有没有想过,如果有一个三维的逗比表情包,你就可以对别人进行360度的全方位无死角嘲讽了! 想到这里,你是不是由衷地在心里发出了豪爽而邪恶的笑声?

就像这样:

而现在,python就可以满足你这一不可告人的愿望! 照例,我们用到的还是matplotlib的三维渲染。

首先,我们要有一张表情包的图片,最好是长度是宽度的两倍,这样的话,平面图片映射到球体上以后,变形会相对小一些。 如果原始图片不符合要求,可以在画图工具里面重新调整大小,像下图这样:

Python资源共享群:484031800

那么,首先,表情包原图是这样的:

然后,我们重新生成一张长图,长度是上图的六倍,将上图的表情横着摆6个,代码和图片如下:

<span><span style="font-size: 15px;letter-spacing: 1px;">im=Image.open(r'origin.png')</span></span>

<span><span style="font-size: 15px;letter-spacing: 1px;"> width,height=im.size</span></span>

<span><span style="font-size: 15px;letter-spacing: 1px;"> result=Image.new(im.mode,(width*6,height))</span></span>

<span><span style="font-size: 15px;letter-spacing: 1px;">for i in range(6):</span></span>

<span><span style="font-size: 15px;letter-spacing: 1px;"> result.paste(im,box=(i*width,0))</span></span>

<span><span style="font-size: 15px;letter-spacing: 1px;"> result.save('result.png')</span></span>

接着,就是确定图片的显示范围,为了避免图片发生严重的变形,需要将图片映射到“低纬度”地区,我设定的是-pi/8到pi/8的范围。

用下面几行代码确定所有点的坐标:

<span><span style="font-size: 15px;letter-spacing: 1px;">#1128指的是长图的长度</span></span>

<span><span style="font-size: 15px;letter-spacing: 1px;">u = np.linspace(0, 2*pi, 1128 * 1)</span></span>

<span><span style="font-size: 15px;letter-spacing: 1px;">#94指的是长图的宽度</span></span>

<span><span style="font-size: 15px;letter-spacing: 1px;">v = np.linspace(-pi / 8, pi / 8, 94 * 1)</span></span>

<span><br /></span>

<span><br /></span>

<span><span style="font-size: 15px;letter-spacing: 1px;">x=a*np.outer(np.cos(u),np.cos(v))</span></span>

<span><span style="font-size: 15px;letter-spacing: 1px;">y=a*np.outer(np.sin(u),np.cos(v))</span></span>

<span><span style="font-size: 15px;letter-spacing: 1px;">z=b*np.outer(np.ones(np.size(u)),np.sin(v))</span></span>

下文的最终绘制过程中,我们需要用到plot_surface函数,而该函数中有一个参数是facecolors,这个参数的意思就是为椭球的表面设置RGB值,我们就要在图片的各个像素点的RGB值和椭球表面的点之间建立一一对应的关系。 代码如下:

<span><span style="font-size: 15px;letter-spacing: 1px;">bm=Image.open(r'result.png')</span></span>

<span><span style="font-size: 15px;letter-spacing: 1px;">bm=np.array(bm)</span></span>

<span><br /></span>

<span><br /></span>

<span><span style="font-size: 15px;letter-spacing: 1px;">colors=[]</span></span>

<span><br /></span>

<span><br /></span>

<span><span style="font-size: 15px;letter-spacing: 1px;">for i in range(bm.shape[1]-1,-1,-1):</span></span>

<span><span style="font-size: 15px;letter-spacing: 1px;"> item=[]</span></span>

<span><span style="font-size: 15px;letter-spacing: 1px;">for j in range(bm.shape[0]-1,-1,-1):</span></span>

<span><span style="font-size: 15px;letter-spacing: 1px;"> color=&quot;#{}{}{}&quot;.format(str.zfill(str(hex(bm[j][i][0]))[2:],2),str.zfill(str(hex(bm[j][i][1]))[2:],2),str.zfill(str(hex(bm[j][i][2]))[2:],2))</span></span>

<span><span style="font-size: 15px;letter-spacing: 1px;"> item.append(color)</span></span>

<span><span style="font-size: 15px;letter-spacing: 1px;"> colors.append(item)</span></span>

最后,colors数组里面存储了所有椭球上面的点的RGB值。 将colors赋值给facecolors就可以完成最后的绘制。

最终的结果大概是这样:

其他的表情也都可以试试。

说不定会有意外惊喜的哟

如何用python绘制一系列三维的逗比风格表情包!相关推荐

  1. 如何用python绘制一系列三维的逗比风格表情包

    表情包是当代社交生态中的战略性武器,既托起了友情的小船,又浮起了爱情的巨轮,还载起了亲情的航空母舰.在一个又一个宁静又不乏躁动的夜晚,此起彼伏的"老铁666"."顶你上去 ...

  2. python画图表情包_如何用python绘制一系列三维的逗比风格表情包

    表情包是当代社交生态中的战略性武器,既托起了友情的小船,又浮起了爱情的巨轮,还载起了亲情的航空母舰.在一个又一个宁静又不乏躁动的夜晚,此起彼伏的"老铁666"."顶你上去 ...

  3. python表情包多样化图形化聊天室_如何用python绘制一系列三维的逗比风格表情包...

    文章转载自公众号 Python爱好者社区 , 作者 盛光晓 表情包是当代社交生态中的战略性武器,既托起了友情的小船,又浮起了爱情的巨轮,还载起了亲情的航空母舰.在一个又一个宁静又不乏躁动的夜晚,此起彼 ...

  4. python三维柱形图_如何用Python绘制3D柱形图

    本文主要讲解如何使用python绘制三维的柱形图,如下图 源代码如下: import numpy as np import matplotlib.pyplot as plt from mpl_tool ...

  5. 用python绘制柱状图标题-如何用Python绘制3D柱形图

    本文主要讲解如何使用python绘制三维的柱形图,如下图 源代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2 ...

  6. python画树叶-手把手|如何用Python绘制JS地图?

    原标题:手把手|如何用Python绘制JS地图? 关于转载授授权 大数据文摘作品,欢迎个人转发朋友圈,自媒体.媒体.机构转载务必申请授权,后台留言"机构名称+文章标题+转载",申请 ...

  7. python获取excel数据制作有文字和图表的报告_如何用Python绘制学术报告图表?

    原标题:如何用Python绘制学术报告图表? 作者:ExcelTing 原文:http://cnblogs.com/excelting/p/6507680.html 全文约 3581 字,读完可能需要 ...

  8. python均线选股_python选股模型均线,已知股票数据,如何用Python绘制k线日对应数据...

    Q1:已知股票数据,如何用Python绘制k线日对应数据 我没遇到过 只是自己写过 有点经验 先确定时间片 然后再把tick插入就行了 Q2:使用python实现ema(指数移动平均的计算) a =  ...

  9. 如何用Python绘制曲线——turtle画小鱼化石的实践篇

    turtle绘制曲线的方法很多,除了大家常用的"一步一拐法",用抛物线公式来绘制曲线也十分方便.(对"一步一拐法"感兴趣的童鞋可参考博文 <如何用Pyth ...

最新文章

  1. python编程高手教程_写给编程高手的Python教程(11) 深入类和对象
  2. OpenYurt 如何 “0 侵入” 攻破云边融合难点
  3. C指针原理(15)-C指针基础
  4. JavaScript 使用变量访问对象属性
  5. 内存泄露严重吗_内存泄漏–测量频率和严重性
  6. 【渝粤题库】陕西师范大学152102 管理学原理作业(高起专)
  7. Python开发工程师常见的面试题及答案分享,记得收藏哈!
  8. jquery ajax调用服务器端指定的函数的三种方式
  9. python可视化拖拽平台_python 有没有类似 VS 那种可以拖拽界面的 IDE?
  10. sdoi2015 位图+区间+矩形
  11. Javascript基础 对象与方法的识别
  12. 【MySQL】MySQL异常Lock wait timeout exceeded try restarting transaction
  13. vue 初始化请求例子_Vue实例初始化
  14. opencv3.2.0 Cmake 3.8.0 + tdm-gcc-5.1.0-3 OpenThread
  15. Python使用datetime来判断近七天
  16. 拦截导弹问题(Noip1999)
  17. vim学习 08——搜索替换
  18. Python语言的起源与发展
  19. 1.1初识sakura语法
  20. Android保存图片到本地或者数据库,并通知相册更新

热门文章

  1. python爬虫增加访问量
  2. Skype 使用小技巧
  3. Linux安装Skype
  4. [Windows]Win10关于Sysprep无法验证你的Windows安装
  5. 励志 - 体重18公斤北航新生到校报到
  6. mysql 192.168.0.%_如果mysql数据库所在的主机IP是192.168.0.1,用户名是ec,密码是123456,则用php连接这个mysql数据库的命令可以写为:...
  7. 明日之后1月14日服务器维护,明日之后11月14日停机更新公告:更新内容有哪些?...
  8. Android 沉浸式状态栏及悬浮效果
  9. Creator 2.0.x 微信小游戏加载优化(一):定制wx-downloader
  10. EF事务执行中报错:基础提供程序在 Open 上失败、此操作对该事务的状态无效、事务超时