您当前的位置: 首页 >  Python

Xavier Jiezou

暂无认证

  • 0浏览

    0关注

    394博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【python】我用30行代码实现了小米新logo的制作

Xavier Jiezou 发布时间:2021-04-04 15:15:09 ,浏览量:0

在这里插入图片描述

文章目录
  • 1. 写在前面
  • 2. 素材准备
  • 3. 依赖模块
  • 4. 画超椭圆
  • 5. 合成新图
  • 6. 效果展示
  • 7. 相关推荐
  • 8. 引用参考

1. 写在前面

近日,小米公司发布新logo引发网友热议。 在这里插入图片描述 耗时2年,花费200万设计的新logo被吐槽,很多网友发表评论调侃。 在这里插入图片描述 乍一眼看确实是这样,不就是将方角矩形换成圆角矩形了嘛。 在这里插入图片描述 正所谓,外行人看热闹,内行人看门道。其实新logo边缘的形状并不是圆角矩形,而是超椭圆。 在这里插入图片描述 超椭圆有很多种类型,设计师原研哉最终采取的是n=3这一形状。 在这里插入图片描述 接下来我们便在python中,根据这一超椭圆公式来画图,并完成小米新logo的制作。

2. 素材准备

xiaomi_old_logo.png,像素1200 x 1200:https://img-blog.csdnimg.cn/2021040414023076.png

3. 依赖模块
pip install matplotlib
pip install pillow
4. 画超椭圆

n=3时的超椭圆公式: ∣ x 3 ∣ + ∣ y 3 ∣ = 1 |x^{3}|+|y^{3}|=1 ∣x3∣+∣y3∣=1,其中 x x x的取值范围为[-1, 1]

因为我们要在matplotlib中绘图,需要将公式转换为 y y y关于 x x x的函数方程: f ( x ) = { + 1 − ∣ x 3 ∣ 3 − 1 ≤ x ≤ 1 − 1 − ∣ x 3 ∣ 3 − 1 ≤ x ≤ 1 f(x)=\left\{ \begin{array}{rcl} +\sqrt[3]{1-|x^{3}|}&{-1 \leq x \leq 1}\\ -\sqrt[3]{1-|x^{3}|}&{-1 \leq x \leq 1} \end{array} \right. f(x)={+31−∣x3∣ ​−31−∣x3∣ ​​−1≤x≤1−1≤x≤1​

import matplotlib.pyplot as plt
import numpy as np


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('superellipse.png', transparent=True, dpi=100) # 1200 x 1200,设置透明,不留白

superellipse.png,像素1200 x 1200:https://img-blog.csdnimg.cn/20210404142251266.png

在这里插入图片描述

5. 合成新图

提取旧logo中白色mi字部分并覆盖到对应像素位置的超椭圆图片上。(白色的rgb值为255,255,255)

from PIL import Image

im_1 = Image.open('xiaomi_old_logo.png')
im_2 = Image.open('superellipse.png')

w, h = im_1.size

for i in range(w):
    for j in range(h):
        data = im_1.getpixel((i, j))
        if data == (255,)*4:
            im_2.putpixel((i, j), (255,)*4)

im_2.save('xiaomi_new_logo.png')
6. 效果展示

在这里插入图片描述

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.figure(figsize=(10, 5))
plt.subplot(121)
plt.title('新')
plt.axis('off')
plt.imshow(plt.imread('xiaomi_new_logo.png'))
plt.subplot(122)
plt.title('旧')
plt.axis('off')
plt.imshow(plt.imread('xiaomi_old_logo.png'))
plt.savefig('comparation.png', dpi=144)
plt.show()
7. 相关推荐

这里推荐一个在线函数曲线生成工具:https://www.desmos.com/calculator?lang=zh-CN

在这里插入图片描述

8. 引用参考

https://pillow-cn.readthedocs.io/zh_CN/latest/reference/Image.html#PIL.Image.Image.putpixel

关注
打赏
1661408149
查看更多评论
立即登录/注册

微信扫码登录

0.0451s