用Python批量生成炫酷扫光GIF动效效果

 更新时间:2025年11月27日 08:27:27   作者:程序员爱钓鱼  
在电商、广告或社交媒体中,我们经常看到商品图片带有光线扫过的动态效果,这类动效不仅吸引眼球,还能让产品显得更有质感,今天,我就分享一个用 Python 批量生成扫光 GIF 的小工具,并附带 可视化 GUI,操作非常简单,需要的朋友可以参考下

技术栈与依赖

本工具使用了以下 Python 库:

  • Pillow:用于图片处理(读写、滤镜、透明通道等)。
  • numpy:矩阵计算,加快图像运算。
  • imageio:将图片序列生成 GIF。
  • ttkbootstrap:美化版 Tkinter GUI,操作友好。
  • tkinter:基础 GUI 框架,用于文件选择和交互。

安装依赖:

pip install pillow numpy imageio ttkbootstrap

核心思路

  1. 生成光条 Mask 通过数学函数生成一个沿对角线扫过的光条掩码,并支持调节宽度、角度和多光源叠加效果。
  2. 叠加光条到原图 使用 NumPy 对图片像素做线性叠加,让光条有柔和的渐变效果,并支持调整亮度和透明度。
  3. 生成多帧 GIF 将每一帧的光条位置稍微移动,然后利用 imageio 保存成 GIF,实现光条流动的效果。

关键代码示例

生成光条掩码

def make_sweep_mask(size, progress, offset=0.0, width_px=25):
    W, H = size
    diag = int((W**2 + H**2)**0.5 * 1.3)
    x = np.linspace(-1.5, 1.5, diag)
    y = np.linspace(-1.5, 1.5, diag)
    xx, yy = np.meshgrid(x, y)

    rad = np.deg2rad(35)  # 光条角度
    xr = xx * np.cos(rad) + yy * np.sin(rad)
    center = progress * 2 - 1 + offset
    dist = np.abs(xr - center)

    mask = np.exp(-(dist / (width_px / min(W, H))) ** 2)
    return Image.fromarray((mask * 255).astype(np.uint8), 'L').crop((diag-W)//2, (diag-H)//2, (diag+W)//2, (diag+H)//2)

光条叠加

def apply_sweep(base_img, frame_index, width_px=25):
    mask = make_sweep_mask(base_img.size, frame_index / (FRAMES - 1), width_px=width_px)
    mask = mask.filter(ImageFilter.GaussianBlur(max(1, int(min(base_img.size)*0.03))))
    alpha = np.clip(np.array(mask)/255*1.5, 0, 1)
    base_arr = np.array(base_img.convert("RGBA"), dtype=np.float32)
    out_rgb = base_arr[..., :3] + alpha[..., None] * (255 - base_arr[..., :3])
    return Image.fromarray(np.dstack([out_rgb, base_arr[...,3]]).astype(np.uint8), "RGBA")

批量生成 GIF

def generate_gif_batch():
    file_paths = filedialog.askopenfilenames(title="选择图片")
    output_dir = filedialog.askdirectory(title="选择输出文件夹")
    for path in file_paths:
        base = Image.open(path).convert("RGBA")
        frames = [apply_sweep(base, i) for i in range(FRAMES)]
        out_path = os.path.join(output_dir, os.path.splitext(os.path.basename(path))[0]+"_sweep.gif")
        imageio.mimsave(out_path, frames, duration=float(duration_entry.get()))

GUI 使用界面

工具提供简单易用的 GUI:

  • 输入光条宽度(px)
  • 设置每帧时长(秒)
  • 点击按钮选择多张图片并生成 GIF

GUI 使用 ttkbootstrap 美化,让操作更直观:

root = ttk.Window(title="扫光GIF生成器", themename="superhero")
width_entry = ttk.Entry(root)
duration_entry = ttk.Entry(root)
ttk.Button(root, text="生成 GIF", command=generate_gif_batch).pack()
root.mainloop()

效果展示

使用该工具,只需几秒钟就能将普通图片生成带光条扫过的动态 GIF,光条位置、宽度、透明度和帧数都可以灵活调节,非常适合电商主图和社交媒体动图。

总结

这个工具的特点:

  • 批量处理:一次选择多张图片即可生成 GIF
  • 可调光条:宽度、颜色、透明度、模糊可调
  • GUI 操作简单:无需命令行即可完成全部操作
  • 纯 Python 实现:跨平台、轻量级

如果你是电商运营或者社媒设计师,想给商品图片加点“亮点”,这个小工具绝对值得一试。

到此这篇关于用Python批量生成炫酷扫光GIF动效效果的文章就介绍到这了,更多相关Python炫酷扫光GIF动效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Jupyter Notebook/VSCode导出PDF中文不显示的解决

    Jupyter Notebook/VSCode导出PDF中文不显示的解决

    这篇文章主要介绍了Jupyter Notebook/VSCode导出PDF中文不显示的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • python中为main方法传参问题

    python中为main方法传参问题

    这篇文章主要介绍了python中为main方法传参问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • python项目运行导致内存越来越大的原因详析

    python项目运行导致内存越来越大的原因详析

    最近在跑python程序时,出现占用的内存不断增加的情况,下面这篇文章主要给大家介绍了关于python项目运行导致内存越来越大的原因详析,本文通过图文介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • 12个Pandas/NumPy中的加速函数使用总结

    12个Pandas/NumPy中的加速函数使用总结

    在本文中,数据和分析工程师 Kunal Dhariwal 为我们介绍了 12 种 Numpy 和 Pandas 函数,这些高效的函数会令数据分析更为容易、便捷
    2022-09-09
  • Python使用FontTools进行字体处理的终极指南

    Python使用FontTools进行字体处理的终极指南

    你是否曾想过用代码来操控字体文件?FontTools就是这样一个神奇的工具箱,作为Python生态中最强大的字体处理库,它让你能够轻松解析、编辑和生成各种字体格式,下面小编就为大家详细说说Python使用FontTools进行字体处理的终极指南,需要的朋友可以参考下
    2025-11-11
  • 使用Python绘制带填充纹理的堆叠图

    使用Python绘制带填充纹理的堆叠图

    在数据分析和可视化中,堆叠条形图是一种非常有用的工具,能够直观地展示不同类别在各个样本中的分布情况,下面我们来看看具体实现方法吧
    2025-07-07
  • python中二分查找法的实现方法

    python中二分查找法的实现方法

    在本篇内容里小编给大家整理了关于python中二分查找法的实现方法,有需要的朋友们可以学习下。
    2020-12-12
  • Jupyter Notebook出现不是内部或外部的命令解决方案

    Jupyter Notebook出现不是内部或外部的命令解决方案

    这篇文章主要介绍了Jupyter Notebook出现不是内部或外部的命令解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Django Channel实时推送与聊天的示例代码

    Django Channel实时推送与聊天的示例代码

    这篇文章主要介绍了Django Channel实时推送与聊天的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Python 分形算法代码详解

    Python 分形算法代码详解

    分形算法就是使用计算机程序模拟出大自然界的分形几何图案,是分形几何数学与计算机科学相融合的艺术,今天小编通过本文给大家介绍Python 分形算法实现代码,感兴趣的朋友一起看看吧
    2022-03-03

最新评论