如何使用Pillow实现示例图片中的模糊过渡效果
如何使用Pillow实现示例图片中的模糊过渡效果
嘿,我完全懂你想要的那种效果——就是像PS里做的那样,两张图在边缘处自然过渡,还带着渐变模糊的柔化感对吧?你之前试了裁剪像素、用Pillow自带的模糊但没达到预期,其实问题出在没结合渐变蒙版来控制模糊的过渡范围,我来一步步教你怎么实现:
核心思路
本质上就是先把两张图拼接,然后在过渡区域用渐变蒙版让模糊后的图层和原图自然融合,模拟出从清晰到模糊再到另一张图的过渡效果。
具体步骤
假设你已经有两张要拼接的图片(左图img_left、右图img_right),先确保它们的高度一致,不一样的话用img.resize()调整下尺寸。
- 拼接基础图
先把两张图横向拼在一起,得到一张完整的底图:
from PIL import Image, ImageFilter # 先加载你的两张图片 img_left = Image.open("left_image.jpg") img_right = Image.open("right_image.jpg") # 统一高度(假设以左图高度为准) img_right = img_right.resize((img_right.width, img_left.height)) w1, h = img_left.size w2, _ = img_right.size # 创建拼接后的空白图,把两张图贴进去 combined = Image.new('RGB', (w1 + w2, h)) combined.paste(img_left, (0, 0)) combined.paste(img_right, (w1, 0))
- 制作模糊版的左图
给左图做高斯模糊,模糊半径可以根据你想要的柔化程度调整(比如20,数值越大越模糊):
blurred_left = img_left.filter(ImageFilter.GaussianBlur(radius=20))
- 创建渐变蒙版
我们需要一个从完全不透明到完全透明的渐变蒙版,用来控制模糊左图的叠加范围——让左图的右侧区域(比如50像素宽的过渡区)从清晰逐渐变成模糊:
# 创建一个灰度蒙版(L模式),初始全黑(对应不透明) mask = Image.new('L', (w1, h), 0) # 定义过渡区宽度,这里设为50像素,你可以按需调整 transition_width = 50 # 给过渡区填充渐变的透明度 for x in range(max(0, w1 - transition_width), w1): # 计算当前x位置的透明度:从0到255渐变 alpha_value = int(255 * (x - (w1 - transition_width)) / transition_width) for y in range(h): mask.putpixel((x, y), alpha_value)
- 叠加模糊图层实现过渡
把模糊后的左图通过蒙版叠加到拼接图上,这样过渡区就会自然呈现清晰到模糊的效果,和右图无缝衔接:
combined.paste(blurred_left, (0, 0), mask=mask) # 最后保存结果 combined.save("transition_result.jpg")
额外调整建议
- 如果想要过渡区在右图的左侧,只需要把模糊对象换成右图,蒙版也改成在右图左侧区域做渐变,然后叠加到拼接图的对应位置就行。
- 可以调整
transition_width(过渡区宽度)和radius(模糊半径)来适配你的图片风格,多试几次就能找到最贴合的参数。
你之前的尝试没成功,是因为单独裁剪像素或全图模糊都没法控制过渡的自然度,用渐变蒙版就能精准控制模糊的范围和强度,和PS里的蒙版原理是一样的哦~
备注:内容来源于stack exchange,提问作者user23273740
相关产品推荐
相关产品推荐

