看看如何用Python绘制小米新版天价logo


Posted in Python onApril 20, 2021

最终呈现效果

哈哈,咋们在讲述之前,首先看看最终呈现的效果吧,整体来说还是很不错的。

看看如何用Python绘制小米新版天价logo

小米 “新” logo背后的数学

前段时间,小米公司发布了一条微博,引发了热议,原来小米换了新logo了。

看看如何用Python绘制小米新版天价logo

很多人,都觉得雷总被骗了。说实话,我当时猛的一看,也是很蒙蔽,可能咋们不懂美学,不懂新logo背后蕴藏的文化底蕴吧!

看看如何用Python绘制小米新版天价logo

但是,原设计者原研哉说到:最新设计的小米logo,融入了东方哲学的思考,从而提出了一个具有「超椭圆」数学之美的小米新 LOGO,同时还增加了黑色和科技银来作为小米品牌色彩的新搭档。

原研哉还说到:在验证的过程中,用到了一个数学公式。

看看如何用Python绘制小米新版天价logo

从上面的公式可以看到,这里有一个n,因此可以知道:上述公式能够绘制出n种类型的超椭圆。而设计者最终推荐使用n=3这一形状。

看看如何用Python绘制小米新版天价logo

看看如何用Python绘制小米新版天价logo

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

以上就是看看如何用Python绘制小米新版天价logo的详细内容,更多关于python绘制小米logo的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
pymssql ntext字段调用问题解决方法
Dec 17 Python
详解C++编程中一元运算符的重载
Jan 19 Python
Python 详解基本语法_函数_返回值
Jan 22 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
Apr 22 Python
解决python opencv无法显示图片的问题
Oct 28 Python
Django实现单用户登录的方法示例
Mar 28 Python
用Pelican搭建一个极简静态博客系统过程解析
Aug 22 Python
Python 如何提高元组的可读性
Aug 26 Python
python3 实现调用串口功能
Dec 26 Python
MAC平台基于Python Appium环境搭建过程图解
Aug 13 Python
python urllib库的使用详解
Apr 13 Python
Python初学者必备的文件读写指南
Jun 23 Python
基于python制作简易版学生信息管理系统
基于python的matplotlib制作双Y轴图
90行Python代码开发个人云盘应用
基于python实现银行管理系统
python爬虫框架feapde的使用简介
Apr 20 #Python
python实现大文本文件分割成多个小文件
Apr 20 #Python
Python绘制分类图的方法
You might like
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
php下载文件的代码示例
2012/06/29 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
ThinkPHP的SAE开发相关注意事项详解
2016/10/09 PHP
Discuz论坛密码与密保加密规则
2016/12/19 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
IE、FF浏览器下修改标签透明度
2014/01/28 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
js propertychange和oninput事件
2014/09/28 Javascript
JQuery中Bind()事件用法分析
2015/05/05 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
浅谈jquery中next与siblings的区别
2016/10/27 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
2017/02/10 Javascript
JavaScript实现提交模式窗口后刷新父窗口数据的方法
2017/06/16 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
关于python的list相关知识(推荐)
2017/08/30 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
Python3随机漫步生成数据并绘制
2018/08/27 Python
使用pip安装python库的多种方式
2019/07/31 Python
python中bytes和str类型的区别
2019/10/21 Python
python isinstance函数用法详解
2020/02/13 Python
Python测试框架:pytest学习笔记
2020/10/20 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
英国玛莎百货美国官网:Marks & Spencer美国
2018/11/06 全球购物
《忆江南》教学反思
2014/04/07 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
打架检讨书
2015/01/27 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
Java基础-封装和继承
2021/07/02 Java/Android
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers