看看如何用Python绘制小米新版天价logo
作者:数据分析与统计学之美 发布时间:2023-04-09 06:01:10
目录
最终呈现效果
小米 “新” logo背后的数学
Python绘制新logo流程
获取资源
最终呈现效果
哈哈,咋们在讲述之前,首先看看最终呈现的效果吧,整体来说还是很不错的。
小米 “新” logo背后的数学
前段时间,小米公司发布了一条微博,引发了热议,原来小米换了新logo了。
很多人,都觉得雷总被骗了。说实话,我当时猛的一看,也是很蒙蔽,可能咋们不懂美学,不懂新logo背后蕴藏的文化底蕴吧!
但是,原设计者原研哉说到:最新设计的小米logo,融入了东方哲学的思考,从而提出了一个具有「超椭圆」数学之美的小米新 LOGO,同时还增加了黑色和科技银来作为小米品牌色彩的新搭档。
原研哉还说到:在验证的过程中,用到了一个数学公式。
从上面的公式可以看到,这里有一个n,因此可以知道:上述公式能够绘制出n种类型的超椭圆。而设计者最终推荐使用n=3这一形状。
Python绘制新logo流程
① 绘图原理
在正式绘图之前,我们先来讲述一下Python绘制新logo的“绘图原理”。掌握了原理后,剩下的问题就交给代码吧。
① 利用 “超椭圆” 公式,绘制一个带填充色的椭圆;
② 遍历 “旧logo” 上的像素值,保留白色 “米字” 处的像素值;
③ 将带“米字” 的像素值,写入第一步的超椭圆中;
② 重要知识点的普及
关于整个代码,有几个函数需要给大家提一下,为了大家更够很快学习。但是不会讲解的很详细,大家可以根据说明,自行下去查阅相关资料。
① plt.fill():用于给图形填充颜色;
② plt.axis():用于打开/取消坐标轴展示;
③ plt.subplots_adjust()和plt.margins():用于去掉图形外侧多余的留白;
④ image.getpixel():用于读取图片的像素值;
⑤ image.putpixel():用于在指定坐标位置处,写入像素值;
③ 上代码
首先我们先导入相关库:
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
接着,利用上面 提到的公式,绘制一个不留白的n=3的超椭圆。
x = np.linspace(-1, 1, 1000)
y = + pow(1-abs(pow(x, 3)), 1/3) # 注意公式的写法
z = - pow(1-abs(pow(x, 3)), 1/3) # 注意公式的写法
plt.figure(figsize=(12, 12)) # 画布大小
plt.plot(x, y, color=(255/255, 103/255, 0))
plt.plot(x, z, color=(255/255, 103/255, 0))
plt.fill(x, y, color=(255/255, 103/255, 0)) # 填充颜色
plt.fill(x, z, color=(255/255, 103/255, 0)) # 填充颜色
plt.axis('off') # 不显示坐标轴
plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0)
plt.margins(0, 0)
plt.savefig('fill.png', transparent=True, dpi=100) # 设置保存图片的透明值
然后,遍历旧logo的像素值,保留 “米字” 那一块儿。将该像素值,写入上面的 “fill.png” 中。有一点需要注意的是:白色的rgb值是255, 255, 255。
image_1 = Image.open('old.png')
image_2 = Image.open('fill.png')
w, h = image_1.size
for i in range(w):
for j in range(h):
data = image_1.getpixel((i, j))
if data == (255,)*4:
image_2.putpixel((i, j), (255,)*4)
image_2.save('new.png')
获取资源
以上图片和代码,均已打包,大家可以自由获取哦!
链接:https://pan.baidu.com/s/1K1Kjmwnsj8NFtZRqWbZW6g
提取码:deoy
来源:https://mp.weixin.qq.com/s/AFgQQgq0KSEvtY2mD9kFHQ


猜你喜欢
- 如下所示:>>> import numpy as np>>> a = np.array([[1, 2,
- 如果用户查询时,使用Order BY排序语句指定按员工编号来排序,那么排序后产生的所有记录就是临时数据。对于这些临时数据,Oracle数据库
- Pycharm默认可以识别py脚本中的SQL语句,本身很不错,但当SQL拼接时就显示的代码特别难看,找了好久,终于知道怎么关闭SQL识别功能
- 最近临时工作要生成xml报名,通过MQ接口发送。简单小程序。自增长拼成xml报文Test_001.py# encoding=utf-8imp
- 安装很简单pip install psutil官网地址为:https://pythonhosted.org/psutil/ (文档上有详细的
- 本文实例讲述了Java操作Mysql的方法。分享给大家供大家参考。具体分析如下:不同于C#操纵数据库的千篇一律,如果是要Java把操纵数据库
- 如下所示:import osos.system()os.popen().read().strip()#上面2种方法 是python 执行终端
- 本文实例讲述了Python将阿拉伯数字转换为罗马数字的方法。分享给大家供大家参考。具体实现方法如下:def numToRomanNum(Nu
- 前言最近公司业务服务老出bug,各路大佬盯着链路图找问题找的头昏眼花。某天大佬丢了一张图过来“我们做一个资源拓扑图吧,方便大家找bug”。就
- 一、Python短信发送界面最后的效果二、准备:注册腾讯云账号并配置短信功能(1)注册腾讯云账号登录腾讯云网址(2)获取AppID、AppK
- Flask子域名一般用于数量比较少的子域名,一个模块对应一个子域名。先看下面一个例子:modules.py:from flask impor
- 技巧之一:提高使用Request集合的效率 访问一个ASP集合来提取一个值是费时的、占用计算资源的过程。因为这个操作包含了一系列对相关集合的
- 本文实例为大家分享了python实现抽奖小程序的具体代码,供大家参考,具体内容如下设计一个抽奖服务 背景:有x个奖品,要求在y天内
- cs页面调用代码: public int TotalPage = 0; public int PageCurrent = 1; public
- 请问鼠标移过去就出现二级菜单代码怎么写啊 <head><style type="tex
- 前言 一直用ASP+ACCESS来编写网页和公司的内部应用系统,内部应用系统也就是大家说的OA吧,这个我也不知道,公司又叫它ERP,反正不管
- mysql-5.7.23-winx64 解压版详细安装教程,供大家参考,具体内容如下1、Click here to download Mys
- 最近和Sobin在做一个精品课程的项目,因为用到一个固定的id作为表间关联,所以在前一个表插入数据后要把插入数据生成的自增id传递给下一个表
- 下面两个函数的使用和FIND_IN_SET一样,使用时只需要把FIND_IN_SET换成FIND_PART_IN_SET或FIND_ALL_
- 本文实例讲述了Python实现matplotlib显示中文的方法。分享给大家供大家参考,具体如下:【注意】可能与本文主题无关,不过我还是想指