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

如何使用Python PIL实现渐变效果的差异化透明度设置?

实现效果说明

你要实现的是常见的社交平台内容分享图效果:以模糊放大的原图作为背景,中间放置保留圆角的清晰原图,整体为固定竖版比例。这个效果完全可以用Python Pillow实现,具体实现思路和示例代码如下:

实现步骤

  • 第一步:安装依赖库
    执行命令安装Pillow:
    pip install pillow

  • 第二步:核心逻辑说明

  1. 定义输出画布的尺寸,比如常见的9:16竖版尺寸(720, 1280)
  2. 处理背景层:将原图等比放大至能完全覆盖画布,裁切多余部分后应用高斯模糊效果作为底层
  3. 处理中间清晰层:将原图等比缩放到适配画布中间展示区域,给四个角添加圆角裁剪后,粘贴到背景层的居中位置
  4. 可选处理:如果需要上下的半透明白色遮罩,可额外生成半透明矩形粘贴到画布上下区域

示例代码

from PIL import Image, ImageFilter, ImageDraw

def make_share_image(input_path, output_path, canvas_size=(720, 1280), blur_radius=30, corner_radius=20):
    # 读取原图
    origin_img = Image.open(input_path).convert("RGBA")
    origin_w, origin_h = origin_img.size

    # 生成模糊背景层
    # 计算放大比例,保证原图能覆盖整个画布
    scale = max(canvas_size[0]/origin_w, canvas_size[1]/origin_h)
    bg_scaled = origin_img.resize((int(origin_w*scale), int(origin_h*scale)), Image.Resampling.LANCZOS)
    # 裁切到画布尺寸
    bg_crop_x = (bg_scaled.width - canvas_size[0]) // 2
    bg_crop_y = (bg_scaled.height - canvas_size[1]) // 2
    bg = bg_scaled.crop((bg_crop_x, bg_crop_y, bg_crop_x+canvas_size[0], bg_crop_y+canvas_size[1]))
    # 应用高斯模糊
    bg = bg.filter(ImageFilter.GaussianBlur(radius=blur_radius))

    # 生成中间清晰圆角层
    # 计算缩放比例,保证原图完整放在画布中间,左右留边
    content_scale = min((canvas_size[0]*0.9)/origin_w, (canvas_size[1]*0.7)/origin_h)
    content_w = int(origin_w * content_scale)
    content_h = int(origin_h * content_scale)
    content_img = origin_img.resize((content_w, content_h), Image.Resampling.LANCZOS)

    # 给内容图加圆角
    mask = Image.new("L", (content_w, content_h), 0)
    draw = ImageDraw.Draw(mask)
    draw.rounded_rectangle((0, 0, content_w, content_h), radius=corner_radius, fill=255)
    content_img.putalpha(mask)

    # 把内容图粘贴到背景中间
    paste_x = (canvas_size[0] - content_w) // 2
    paste_y = (canvas_size[1] - content_h) // 2
    bg.paste(content_img, (paste_x, paste_y), mask=content_img)

    # 保存输出
    bg.convert("RGB").save(output_path, quality=95)

# 调用示例
# make_share_image("input.jpg", "output.jpg")

你可以根据自己的需求调整模糊半径、圆角大小、画布尺寸、中间内容的占比参数,就能得到匹配的效果。

内容的提问来源于stack exchange,提问作者project.py

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:00:00