← 返回教程目录
第 3 章 · 第 2 节 词云

自定义形状:用图片当 mask

Custom Shape: Picture as Mask

用一张 PNG 图片(白色背景 + 黑色主体)当 mask,词云就会按图片形状填充。

1. 准备 mask 图片

2. 加载 mask

import numpy as np


from PIL import Image


from wordcloud import WordCloud





# 读图片转 numpy 数组


mask = np.array(Image.open('heart.png'))





wc = WordCloud(


    width=1000, height=1000,


    mask=mask,                    # 关键!传入 mask


    background_color='white',


    font_path='/System/Library/Fonts/PingFang.ttc',


).generate(text)





wc.to_file('wordcloud_heart.png')

3. 不同 mask 效果对比

shapes = ['heart.png', 'cat.png', 'china_map.png', 'logo.png']


for shape in shapes:


    mask = np.array(Image.open(shape))


    wc = WordCloud(


        width=1000, height=1000,


        mask=mask, background_color='white',


        font_path='/System/Library/Fonts/PingFang.ttc',


    ).generate(text)


    out = f'wc_{shape.replace(".png", "")}.png'


    wc.to_file(out)


    print(f'已生成: {out}')
坑点:如果 mask 图片是 RGBA(带透明度),需要先转 RGB:
mask = np.array(Image.open('xxx.png').convert('RGB'))

4. 配色:让词云更高级

import random





# 自定义颜色函数(每个词随机取色,但只从指定色板里取)


def color_func(word, font_size, position, orientation, random_state=None, **kwargs):


    colors = ['#6e5cff', '#00d4ff', '#ff5cb3', '#ffd700', '#ff6b6b']


    return random.choice(colors)





wc = WordCloud(mask=mask, color_func=color_func, ...).generate(text)

下节我们要解决的另一个常见需求 — 所有字大小一致(签名墙、Logo 拼图)。

想要更多形状(爱心 / 猫 / logo)?词云软件内置 30+ 形状模板

配套软件内置案例数据 + 模板,导入即出图,无需写代码

查看淘宝软件 →