前段时间,小米公司发布了一条微博,引发了热议,原来小米换了新logo了。很多人,都觉得雷总被骗了。说实话,我当时猛的一看,也是很蒙蔽,可能咋们不懂美学,不懂新logo背后蕴藏的文化底蕴吧!& E K, `4 u. k8 _
但是,原设计者原研哉说到:最新设计的小米logo,融入了东方哲学的思考,从而提出了一个具有「超椭圆」数学之美的小米新 LOGO,同时还增加了黑色和科技银来作为小米品牌色彩的新搭档。5 [$ e! M I( _ B9 ?. b9 G. a3 X
原研哉还说到:在验证的过程中,用到了一个数学公式。+ q, y3 q5 E1 f6 y0 q" E7 v2 ~" H
: P. Y/ s' ?, b0 d6 g
从上面的公式可以看到,这里有一个n,因此可以知道:上述公式能够绘制出n种类型的超椭圆。而设计者最终推荐使用n=3这一形状。 8 q! M+ }% k9 r" D% `
$ _3 s o$ g/ I. v! t! v
" V u: n% T+ j% ] ① 绘图原理 : C) F) m/ t+ Q 在正式绘图之前,我们先来讲述一下Python绘制新logo的“绘图原理”。掌握了原理后,剩下的问题就交给代码吧。 $ b, w; y1 p3 z* D8 B4 Z" u
①利用 “超椭圆” 公式,绘制一个带填充色的椭圆;
② 遍历 “旧logo” 上的像素值,保留白色 “米字” 处的像素值;
③ 将带“米字” 的像素值,写入第一步的超椭圆中; ( X+ L' B& k( i7 F( U: I" F F
② 重要知识点的普及4 p- T- H. r& J- J" W
关于整个代码,有几个函数需要给大家提一下,为了大家更够很快学习。但是不会讲解的很详细,大家可以根据说明,自行下去查阅相关资料。3 J0 x- G% O% P
① plt.fill():用于给图形填充颜色;
② plt.axis():用于打开/取消坐标轴展示;
③ plt.subplots_adjust()和plt.margins():用于去掉图形外侧多余的留白;
④ image.getpixel():用于读取图片的像素值;
⑤ image.putpixel():用于在指定坐标位置处,写入像素值; / F8 J* s3 k, {6 V. G7 W
③ 上代码! O: P& C: w3 e3 t# [4 m7 `
首先我们先导入相关库: / O2 w9 ]+ k3 \( N
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')
④ 最终呈现效果 1 L! ~9 m' x1 L9 I9 R) k* T * C0 ^7 c4 a0 N