You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PIL生成渐变图像异常:仅显示纯色与顶部红线的解决方法

修复Python渐变图像生成问题

你的代码核心问题是颜色渐变的比例计算未做归一化,直接用循环变量y作为乘数,导致除了第0行(y=0),其余行的颜色直接跳转到终点色。

举个例子,红色通道的计算式是255 + (0-255)*y:

  • 当y=0时,结果是255(红色)
  • 当y≥1时,结果是255-255*1=0(蓝色的红色通道值)
    所以只有顶部一条红线,剩下的区域全是纯蓝色。

修复后的代码

from PIL import Image, ImageDraw

# Define the image size and color gradient
width, height = 500, 500
color_start = (255, 0, 0)  # red
color_end = (0, 0, 255)  # blue

# Create a new image with the given size
image = Image.new("RGB", (width, height))

# Draw a gradient background on the image
draw = ImageDraw.Draw(image)
for y in range(height):
    # 将y的取值范围归一化到0-1区间,实现平滑渐变
    ratio = y / (height - 1)
    color = tuple(int(color_start[j] + (color_end[j] - color_start[j]) * ratio) for j in range(3))
    draw.line((0, y, width, y), fill=color)

# Save the image to a PNG file
image.save("gradient.png")

关键修复点说明

  • 新增ratio = y / (height - 1):把y从0499的范围映射到01的比例区间,这样颜色通道的值会从起点色线性平滑过渡到终点色,而不是突然跳变。
  • 用height-1而非height:保证最后一行(y=499)的ratio刚好等于1,颜色完全匹配终点色;如果用height,最后一行的比例是499/500≈0.998,颜色会略浅于终点色。

内容的提问来源于stack exchange,提问作者user21628244

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 08:22:41