SuperAPI AI 工具集

slack-gif-creator

设计与创作

查看项目

更新于 10-15 07:54

技能介绍

Slack GIF Creator 是一个为 Slack 优化动画 GIF 的工具包,提供创建动画 GIF 所需的知识与实用工具。

用途 该工具包用于在用户请求制作适配 Slack 的动画 GIF 时提供支持,包含 Slack 的尺寸与参数约束、校验工具以及动画概念。

Slack 要求 尺寸:表情 GIF 推荐 128x128;消息 GIF 为 480x480。 参数:FPS 为 10-30(越低文件越小);颜色为 48-128(越少文件越小);表情 GIF 时长建议控制在 3 秒以内。

核心工作流 使用 core.gif_builder 中的 GIFBuilder 创建构建器,指定宽高与 FPS;通过循环生成帧,使用 PIL 的 Image 与 ImageDraw 绘制动画;调用 builder.add_frame(frame) 添加帧;最后使用 builder.save('output.gif', num_colors=48, optimize_for_emoji=True) 保存并优化。

绘图 处理用户上传的图片时,需判断用户是想直接使用(如“让这个动起来”“把它拆成帧”)还是作为灵感参考(如“做一个类似这样的”)。使用 PIL 的 Image.open 加载图片。 从零绘制图形时,使用 PIL ImageDraw 的图元:ellipse 绘制圆/椭圆,polygon 绘制星形、三角形等任意多边形,line 绘制线条,rectangle 绘制矩形。不要使用 emoji 字体(跨平台不可靠),也不要假设本技能中存在预打包的图形。

让图形更好看 图形应显得精致且有创意。使用更粗的线条,轮廓和线条始终设置 width=2 或更高,width=1 的细线看起来粗糙业余。增加视觉深度:使用渐变背景(create_gradient_background),叠加多个形状增加复杂度。让形状更有趣:不要只画普通圆形,可添加高光、圆环或图案;星星可以有光晕(在后方绘制更大、半透明的版本);组合多个形状。注意颜色:使用鲜艳的互补色,增加对比(浅色形状配深色轮廓,深色形状配浅色轮廓),考虑整体构图。对于复杂形状(心形、雪花等):使用多边形与椭圆的组合,仔细计算点以保证对称,添加细节。要有创意和细节,好的 Slack GIF 应看起来精致。

可用工具 GIFBuilder(core.gif_builder):组装帧并为 Slack 优化。支持 add_frame、add_frames、save(可传 num_colors、optimize_for_emoji、remove_duplicates)。 Validators(core.validators):检查 GIF 是否满足 Slack 要求。validate_gif('my.gif', is_emoji=True, verbose=True) 返回详细校验结果;is_slack_ready('my.gif') 用于快速检查。 Easing Functions(core.easing):实现平滑运动而非线性。使用 interpolate(start, end, t, easing) 应用缓动,可用类型包括 linear、ease_in、ease_out、ease_in_out、bounce_out、elastic_out、back_out。 Frame Helpers(core.frame_composer):常用便捷函数,包括 create_blank_frame(纯色背景)、create_gradient_background(垂直渐变)、draw_circle、draw_text、draw_star(五角星)。

动画概念 抖动/振动:用 math.sin() 或 math.cos() 配合帧索引偏移对象位置,加入小幅随机变化更自然,可应用于 x 和/或 y 位置。 脉冲/心跳:用 math.sin(t * frequency * 2 * math.pi) 实现平滑脉冲;心跳为两次快速脉冲后暂停;在基础尺寸的 0.8 到 1.2 之间缩放。 弹跳:使用 interpolate() 配合 easing='bounce_out' 实现落地,easing='ease_in' 实现下落加速,每帧增加 y 速度模拟重力。 旋转/自转:围绕中心旋转对象,PIL 使用 image.rotate(angle, resample=Image.BICUBIC);摇摆可用正弦波控制角度。 淡入/淡出:创建 RGBA 图像调整 alpha 通道,或使用 Image.blend;淡入 alpha 从 0 到 1,淡出从 1 到 0。 滑动:对象从屏幕外移动到目标位置,起始位置在帧边界外,结束位置为目标位置,使用 interpolate() 配合 easing='ease_out' 平滑停止,easing='back_out' 实现过冲。 缩放:缩放并定位实现变焦效果,放大从 0.1 到 2.0 并裁剪中心,缩小从 2.0 到 1.0,可添加运动模糊。 爆炸/粒子迸发:生成具有随机角度和速度的粒子,每帧更新 x += vx、y += vy,添加重力 vy += gravity_constant,随时间降低 alpha 淡出粒子。

优化策略 仅在要求缩小文件大小时实施以下部分方法:减少帧数(降低 FPS 或缩短时长)、减少颜色(num_colors=48 而非 128)、缩小尺寸(128x128 而非 480x480)、移除重复帧(save() 中 remove_duplicates=True)、表情模式(optimize_for_emoji=True 自动优化)。最大优化示例:builder.save('emoji.gif', num_colors=48, optimize_for_emoji=True, remove_duplicates=True)。

理念 本技能提供:Slack 的要求与动画概念知识;GIFBuilder、validators、缓动函数等工具;使用 PIL 图元创建动画逻辑的灵活性。 本技能不提供:固定的动画模板或预制函数;emoji 字体渲染(跨平台不可靠);内置的预打包图形库。 关于用户上传:本技能不包含预构建图形,但如果用户上传图片,可使用 PIL 加载并处理,根据用户请求判断是直接使用还是仅作灵感。 要有创意,组合各种概念(弹跳+旋转、脉冲+滑动等),充分利用 PIL 的能力。

依赖 pip install pillow imageio numpy