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

如何使用Python的PIL库为透明图片添加边缘渐变效果?

用PIL实现带透明背景图片的边缘渐变效果

当然可以实现,直接用ImageFilter.BLUR会模糊整张图,没法只针对边缘做渐变。要达成需求,得通过提取alpha通道、生成边缘渐变遮罩再合并的方式来实现,具体步骤和代码如下:

实现思路

  1. 加载原图并分离RGBA通道,保留原有的颜色和透明信息
  2. 生成基于边缘距离的渐变alpha遮罩:像素离边缘越近,透明度越高;超出渐变范围的区域保留原透明度
  3. 将原颜色通道和新的渐变alpha通道合并,得到最终效果

代码示例

from PIL import Image

def add_edge_gradient(image_path, gradient_width=50):
    # 加载图片并转为RGBA模式(确保支持透明)
    img = Image.open(image_path).convert("RGBA")
    width, height = img.size
    r, g, b, original_alpha = img.split()

    # 创建新的alpha遮罩画布
    gradient_alpha = Image.new("L", (width, height), 0)
    alpha_pixels = gradient_alpha.load()

    # 遍历每个像素计算渐变透明度
    for x in range(width):
        for y in range(height):
            # 计算当前像素到最近边缘的距离
            edge_distance = min(x, width - x - 1, y, height - y - 1)
            # 生成渐变值:渐变宽度内从0到255过渡,超出则用原透明度
            if edge_distance < gradient_width:
                alpha_val = int(255 * (edge_distance / gradient_width))
            else:
                alpha_val = original_alpha.getpixel((x, y))
            alpha_pixels[x, y] = alpha_val

    # 合并通道得到最终图片
    result_img = Image.merge("RGBA", (r, g, b, gradient_alpha))
    return result_img

# 使用示例:替换为你的图片路径,调整渐变宽度
final_image = add_edge_gradient("input_image.png", gradient_width=30)
final_image.save("output_gradient_edge.png")

说明

  • 调整gradient_width参数可以控制渐变区域的宽度,数值越大,边缘渐变的过渡范围越宽
  • 代码会保留原图本身的透明区域,同时在图片边缘添加平滑的渐变透明效果
  • 这种像素级的计算比模糊滤镜更精准,能完全控制渐变的范围和过渡效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:52:03