07_Numpy渐变图片的生成

本文介绍使用Numpy库中的np.linspace()和np.tile()函数生成渐变图片的方法。通过控制参数,可以实现图片在水平或垂直方向上的灰度渐变效果。同时,通过调整RGB值,可以创建不同颜色渐变的图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

07_Numpy渐变图片的生成

如果图片以ndarray格式处理的话,Numpy有丰富的功能可以对已有图片进行处理,从而得到一张新的图片。
例如:之前介绍过的保存,读取等功能。

01_Numpy的图片处理(读取,变换,保存)

在此,对渐变图片的生死进行介绍:

  • np.tile()和np.linspace()
  • 渐变图片生成(代码)

np.tile()和np.linspace()

虽然生成方法有很多中,这里使用以下的方法来生成渐变图像。

  • np.linspace()等间距数组的增加或减少
  • np.tile()二维数组的排列

渐变的方向只有横,竖。斜面或放射状的渐变不可。

np.linspace()


np.linspace()有开始值(start),结束值(stop),生成个数(num)3个参数,返回的是一个一维数组(等差数列)。
和range(),np.arange()不同的是,隔间数将会自动生成。

import numpy as np

print(np.linspace(0, 10, 3))
# [ 0.  5. 10.]

print(np.linspace(0, 10, 4))
# [ 0.          3.33333333  6.66666667 10.        ]

print(np.linspace(0, 10, 5))
# [ 0.   2.5  5.   7.5 10. ]

start值>stop值也能处理。

print(np.linspace(10, 0, 5))
# [10.   7.5  5.   2.5  0. ]

np.tile()


np.tile()是一个可以横,竖排列的函数。对于创建重复图案的阵列很有帮助。
在参数中指定原始数组和重复次数。在二维排列的情况下,重复数为(行的重复数(垂直),列的重复数(水平))。

import numpy as np

a = np.array([0, 1, 2, 3])

print(np.tile(a, 2))
# [0 1 2 3 0 1 2 3]

print(np.tile(a, (3, 2)))
# [[0 1 2 3 0 1 2 3]
#  [0 1 2 3 0 1 2 3]
#  [0 1 2 3 0 1 2 3]]

print(np.tile(a, (2, 1)))
# [[0 1 2 3]
#  [0 1 2 3]]

如果原始数组是二维数组,也可同样适用。

a = np.array([[11, 12], [21, 22]])

print(np.tile(a, 2))
# [[11 12 11 12]
#  [21 22 21 22]]

print(np.tile(a, (3, 2)))
# [[11 12 11 12]
#  [21 22 21 22]
#  [11 12 11 12]
#  [21 22 21 22]
#  [11 12 11 12]
#  [21 22 21 22]]

print(np.tile(a, (2, 1)))
# [[11 12]
#  [21 22]
#  [11 12]
#  [21 22]]

渐变图片生成(代码)


准备一个函数以生成二维的ndarray数组,该数组可以在垂直或水平方向上以相等的间隔增大或减少。该ndarray对应单色灰度图像。当is_horizontal为True时,灰度为水平变化。当is_horizontal为False时,灰度为垂直变化。

def get_gradation_2d(start, stop, width, height, is_horizontal):
    if is_horizontal:
        return np.tile(np.linspace(start, stop, width), (height, 1))
    else:
        return np.tile(np.linspace(start, stop, height), (width, 1)).T

这个函数扩展到三个维度。为列表中的每种颜色的值(开始,结束,is_horizonta)3个值,然后调用上述二维版本为每个通道生成渐变图片。

def get_gradation_3d(width, height, start_list, stop_list, is_horizontal_list):
    result = np.zeros((height, width, len(start_list)), dtype=np.float)

    for i, (start, stop, is_horizontal) in enumerate(zip(start_list, stop_list, is_horizontal_list)):
        result[:, :, i] = get_gradation_2d(start, stop, width, height, is_horizontal)

    return result

接下来生成实际的渐变图片

array = get_gradation_3d(512, 256, (0, 0, 0), (255, 255, 255), (True, True, True))
Image.fromarray(np.uint8(array)).save('./data/07/gradation_h.jpg', quality=95)

在这里插入图片描述

array = get_gradation_3d(512, 256, (0, 0, 0), (255, 255, 255), (False, False, False))
Image.fromarray(np.uint8(array)).save('./data/07/gradation_v.jpg', quality=95)

在这里插入图片描述

也可以更改RGB值来调整渐变的方向。

array = get_gradation_3d(512, 256, (0, 0, 192), (255, 255, 64), (True, False, False))
Image.fromarray(np.uint8(array)).save('./data/07/gradation_color.jpg', quality=95)

在这里插入图片描述

### 如何生成或设计渐变色三角形图片 要创建一个具有颜色渐变效果的三角形图像,可以利用多种工具和技术来实现。以下是几种常见的方法及其具体操作: #### 方法一:通过 CSS 实现渐变三角形 HTML 和 CSS 是一种简单而强大的方式来生成渐变三角形。核心原理是通过对伪元素 `::before` 或者 `::after` 的边框属性进行调整,并结合线性渐变函数 `linear-gradient()` 来完成。 ```css .triangle { width: 0; height: 0; border-left: 50px solid transparent; /* 左侧透明 */ border-right: 50px solid transparent; /* 右侧透明 */ border-bottom: 100px solid; /* 底部填充渐变 */ } /* 渐变样式 */ .triangle::after { content: ''; position: absolute; top: 0; left: -50px; width: 100px; height: 100%; background: linear-gradient(to bottom right, yellow, blue); /* 设置渐变方向和颜色 */ } ``` 这种方法的优点在于无需额外依赖外部库或工具即可快速生成渐变三角形[^2]。 --- #### 方法二:借助图形编辑软件(如 Photoshop) 如果需要更复杂的自定义效果,则可以选择专业的图形处理软件 Adobe Photoshop 进行手动绘制。步骤如下: 1. 创建一个新的画布; 2. 使用多边形工具绘制所需大小的三角形; 3. 利用渐变工具选择起始与结束颜色并拖拽形成平滑过渡的效果; 4. 导出最终文件为 PNG 或 SVG 格式以便后续使用。 此过程允许设计师完全掌控每一个细节部分,包括但不限于角度变化、不规则边缘以及特殊材质纹理模拟等高级特性[^1]。 --- #### 方法三:编程语言绘图 (Python Matplotlib 示例) 对于程序开发者来说,还可以采用 Python 结合 matplotlib 库来自动生成渐变填充值的矢量图表件。下面给出一段简单的脚本用于演示这一功能: ```python import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Polygon fig, ax = plt.subplots() polygon = Polygon([[0, 0], [1, 0], [0.5, 1]], closed=True, edgecolor='none', facecolor=(1, 0, 0)) # Red color initially set. ax.add_patch(polygon) gradient = np.linspace(0, 1, 256).reshape(-1, 1)[:, None] colors = np.zeros((256, 1, 4)) colors[..., 0] = gradient.squeeze() # R value changes across rows. colors[..., 1:] = [0, 0, 1] # G and B remain constant at zero while alpha stays full opacity. cmap = plt.cm.ScalarMappable(cmap=plt.get_cmap('viridis')) rgba_img = cmap.to_rgba(colors.reshape(-1)) im = ax.imshow(rgba_img.T, extent=[0, 1, 0, 1], origin="lower", aspect="auto") plt.show() ``` 上述代码片段展示了如何构建一个基于数据驱动型视觉表现形式下的动态渐层渲染机制[^3]。 --- #### 方法四:PowerPoint 中的应用实例 最后,在日常办公场景下也可能遇到类似需求——即希望能在幻灯片里加入带有醒目特征却又不失稳重感的设计元素。此时可参照以下建议实施操作流程: - 插入基本几何对象 -> 修改轮廓线条粗细直至消失不见为止; - 填充选项卡切换至“纯色填充”,再点击旁边的小箭头按钮展开更多可能性菜单项; - 找到“渐变填充”子类别之后按照个人喜好设定好起点终点位置参数值就可以了! 这种做法特别适合那些追求高效便捷解决方案的人群群体们去采纳实践起来[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值