如何使用Python PIL实现渐变效果的差异化透明度设置?
实现效果说明
你要实现的是常见的社交平台内容分享图效果:以模糊放大的原图作为背景,中间放置保留圆角的清晰原图,整体为固定竖版比例。这个效果完全可以用Python Pillow实现,具体实现思路和示例代码如下:
实现步骤
第一步:安装依赖库
执行命令安装Pillow:pip install pillow第二步:核心逻辑说明
- 定义输出画布的尺寸,比如常见的9:16竖版尺寸
(720, 1280) - 处理背景层:将原图等比放大至能完全覆盖画布,裁切多余部分后应用高斯模糊效果作为底层
- 处理中间清晰层:将原图等比缩放到适配画布中间展示区域,给四个角添加圆角裁剪后,粘贴到背景层的居中位置
- 可选处理:如果需要上下的半透明白色遮罩,可额外生成半透明矩形粘贴到画布上下区域
示例代码
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
相关产品推荐
相关产品推荐

