QQ登录

只需要一步,快速开始

APP扫码登录

只需要一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

查看: 1342|回复: 0

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

[复制链接]

等级头衔

积分成就    金币 : 2841
   泡泡 : 1516
   精华 : 6
   在线时间 : 1295 小时
   最后登录 : 2024-11-23

丰功伟绩

优秀达人突出贡献荣誉管理论坛元老

联系方式
发表于 2021-4-20 09:12:44 | 显示全部楼层 |阅读模式
       前段时间,小米公司发布了一条微博,引发了热议,原来小米换了新logo了。很多人,都觉得雷总被骗了。说实话,我当时猛的一看,也是很蒙蔽,可能咋们不懂美学,不懂新logo背后蕴藏的文化底蕴吧!
6 K5 r! S+ l& F/ G1 z       但是,原设计者原研哉说到:最新设计的小米logo,融入了东方哲学的思考,从而提出了一个具有「超椭圆」数学之美的小米新 LOGO,同时还增加了黑色和科技银来作为小米品牌色彩的新搭档。0 W, D5 ], C4 U$ ^( {2 S
       原研哉还说到:在验证的过程中,用到了一个数学公式。+ i- o1 `0 G0 K  n& K, [6 ^
1.jpg + Q, f8 G2 ]1 p; `0 s
       从上面的公式可以看到,这里有一个n,因此可以知道:上述公式能够绘制出n种类型的超椭圆。而设计者最终推荐使用n=3这一形状。, a1 i  M/ T& W5 k5 f& q
2.jpg
* @+ b2 g* ^% N5 i9 W2 K 3.jpg
  I1 p% `- B, Y  a% s9 ]① 绘图原理
% I2 C+ a0 W1 s8 r5 Q       在正式绘图之前,我们先来讲述一下Python绘制新logo的“绘图原理”。掌握了原理后,剩下的问题就交给代码吧。' S  d) i$ R, O0 i' ^' J& m( _+ V! Z7 }
  • ①利用 “超椭圆” 公式,绘制一个带填充色的椭圆;
  • ② 遍历 “旧logo” 上的像素值,保留白色 “米字” 处的像素值;
  • ③ 将带“米字” 的像素值,写入第一步的超椭圆中;
    ) R% v7 T- n5 y# ]
② 重要知识点的普及4 @/ d  O5 _' ?' {) ~+ V& _& u6 [- G" R
       关于整个代码,有几个函数需要给大家提一下,为了大家更够很快学习。但是不会讲解的很详细,大家可以根据说明,自行下去查阅相关资料。
# u9 |, Z. T! y& x9 F
  • ① plt.fill():用于给图形填充颜色;
  • ② plt.axis():用于打开/取消坐标轴展示;
  • ③ plt.subplots_adjust()和plt.margins():用于去掉图形外侧多余的留白;
  • ④ image.getpixel():用于读取图片的像素值;
  • ⑤ image.putpixel():用于在指定坐标位置处,写入像素值;
    1 Z3 l8 M. {, }: B
③ 上代码
/ Y, o" O% m0 E# n2 a: W3 m3 Y       首先我们先导入相关库:5 V3 n' Y0 a( t3 w" i0 D( J! C
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. from PIL import Image
      接着,利用上面 提到的公式,绘制一个不留白的n=3的超椭圆。! ]* ^, [9 A# R1 U% `( p' U" z1 S
  1. x = np.linspace(-1, 1, 1000)
  2. y = + pow(1-abs(pow(x, 3)), 1/3) # 注意公式的写法
  3. z = - pow(1-abs(pow(x, 3)), 1/3) # 注意公式的写法
  4. plt.figure(figsize=(12, 12)) # 画布大小
  5. plt.plot(x, y, color=(255/255, 103/255, 0))
  6. plt.plot(x, z, color=(255/255, 103/255, 0))
  7. plt.fill(x, y, color=(255/255, 103/255, 0)) # 填充颜色
  8. plt.fill(x, z, color=(255/255, 103/255, 0)) # 填充颜色
  9. plt.axis('off') # 不显示坐标轴
  10. plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0)
  11. plt.margins(0, 0)
  12. plt.savefig('fill.png', transparent=True, dpi=100) # 设置保存图片的透明值
      然后,遍历旧logo的像素值,保留 “米字” 那一块儿。将该像素值,写入上面的 “fill.png” 中。有一点需要注意的是:白色的rgb值是255, 255, 255。9 H5 ]1 u& Z- S
  1. image_1 = Image.open('old.png')
  2. image_2 = Image.open('fill.png')
  3. w, h = image_1.size
  4. for i in range(w):
  5.     for j in range(h):
  6.         data = image_1.getpixel((i, j))
  7.         if data == (255,)*4:
  8.             image_2.putpixel((i, j), (255,)*4)
  9. image_2.save('new.png')
④ 最终呈现效果4 Q5 m7 i& H4 T: a) W( a( l
4.jpg
2 M4 s% F; V2 D: u( O
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|paopaomj.COM ( 渝ICP备18007172号|渝公网安备50010502503914号 )

GMT+8, 2024-11-23 18:10

Powered by paopaomj X3.5 © 2016-2025 sitemap

快速回复 返回顶部 返回列表