如何使用Python为透明背景图片的局部添加线性透明渐变
图片底部5%区域添加线性透明渐变实现方案
以下方案均兼容带原有透明通道的非矩形PNG图片,不会破坏原图已有的透明属性。
图形编辑器手动操作(以Photoshop为例)
- 打开目标图片后,选中需要处理的图层,点击图层面板底部的「添加图层蒙版」按钮,为当前图层创建空白蒙版
- 选择渐变工具,将渐变类型设置为线性渐变,渐变配色设置为「纯白到纯黑」
- 按
Ctrl+R(Mac为Command+R)调出标尺,右键标尺选择百分比单位,在图片高度95%的位置拖动创建一条参考线 - 按住
Shift保证移动方向垂直,将鼠标从参考线位置(底部5%区域的顶部边界)拖动到图片最底部,松开后渐变自动应用到蒙版 - 导出时选择PNG格式保留透明通道即可。
代码实现方案
CSS 前端在线实现
无需修改原图,浏览器渲染时自动生成效果,兼容性覆盖绝大多数现代浏览器:
/* 给图片添加该类即可生效 */ .bottom-fade { mask-image: linear-gradient(to top, transparent 0%, black 100%); mask-size: 100% 5%; mask-position: left bottom; mask-repeat: no-repeat; /* 兼容webkit内核浏览器 */ -webkit-mask-image: linear-gradient(to top, transparent 0%, black 100%); -webkit-mask-size: 100% 5%; -webkit-mask-position: left bottom; -webkit-mask-repeat: no-repeat; }
Python Pillow 批量本地处理
适合批量处理本地图片,直接生成带渐变效果的新图片:
from PIL import Image, ImageDraw def add_bottom_5p_fade(input_path, output_path): # 打开原图并保留RGBA通道 img = Image.open(input_path).convert("RGBA") width, height = img.size fade_area_height = int(height * 0.05) # 创建L模式蒙版,初始全不透明(值为255) mask = Image.new("L", (width, height), 255) draw = ImageDraw.Draw(mask) # 对底部5%区域绘制渐变 for y in range(fade_area_height): current_alpha = int(255 * (1 - y / fade_area_height)) draw.line( [(0, height - fade_area_height + y), (width, height - fade_area_height + y)], fill=current_alpha ) # 叠加蒙版到原图alpha通道 img.putalpha(mask) img.save(output_path, format="PNG")
内容的提问来源于stack exchange,提问作者Z Dhillon
相关产品推荐
相关产品推荐

