📅  最后修改于: 2023-12-03 14:40:07.110000             🧑  作者: Mango
生成渐变色彩通常需要在不同区域使用不同的颜色,而 Perlin 噪声可以生成连续但随机的值,在这里可以将这些值映射到颜色上。
安装 noise
库:
pip install noise
import noise
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors
# 设置随机种子,保证每次运行生成的图形一致
np.random.seed(0)
# 图形的宽度和高度,单位为像素
width = 800
height = 600
# 生成 Perlin 噪声
scale = 100.0
octaves = 6
persistence = 0.5
lacunarity = 2.0
seed = np.random.randint(0, 100)
world = np.zeros((height, width))
for i in range(height):
for j in range(width):
world[i][j] = noise.pnoise2(i / scale,
j / scale,
octaves=octaves,
persistence=persistence,
lacunarity=lacunarity,
repeatx=width,
repeaty=height,
base=seed)
# 创建 colormap,并设定范围为 [0,1]
color_start = '#0077c3'
color_end = '#f5c800'
cmap = colors.LinearSegmentedColormap.from_list('perlin', [color_start, color_end], N=256)
cmap.set_under(color_start)
cmap.set_over(color_end)
# 显示图形
fig, ax = plt.subplots(figsize=(10, 8))
ax.imshow(world, cmap=cmap, interpolation='bicubic', norm=colors.Normalize(vmin=0, vmax=1), origin='upper')
ax.axis('off')
plt.show()
noise
库的 pnoise2
函数生成二维 Perlin 噪声octaves
表示噪声的层数,层数越高表示生成的噪声越细腻persistence
表示每一层所占的比重,取值范围为 [0,1]lacunarity
表示每一层所占的空间频率,取值通常为大于 1 的实数repeatx
和 repeaty
表示噪声的重复次数,设定为 width
和 height
可以避免图形的边缘出现同一颜色的情况under
和 over
颜色可以避免出现黑色和白色的情况Normalize
类可以将值域范围映射到 [0,1]imshow
函数可以将噪声数组映射到图像上,并使用设定的 colormap 进行渐变着色