SuperAPI AI 工具集

slack-gif-creator

设计与创作

查看项目

更新于 10-15 10:54

技能介绍

Slack GIF Creator 是一套灵活的、用于创建适配 Slack 的动态 GIF 的工具包。它提供针对 Slack 平台限制的校验器、可组合的动画原语,以及可选的辅助工具。资料强调这些工具应按照实际需要灵活应用,以实现创作构想。

适用场景与 Slack 的要求

Slack 对 GIF 有基于用途的具体要求,工具包将其分为两类:

消息 GIF(Message GIFs):最大体积约 2MB;推荐尺寸 480x480;典型帧率 15-20 FPS;颜色限制 128-256;时长 2-5 秒。

表情 GIF(Emoji GIFs):最大体积 64KB(严格限制);推荐尺寸 128x128;典型帧率 10-12 FPS;颜色限制 32-48;时长 1-2 秒。

资料指出表情 GIF 较难处理,64KB 限制严格,有助于达成的策略包括:总帧数限制在 10-15 帧;最多使用 32-48 种颜色;保持设计简单;避免渐变;频繁校验文件体积。

工具包结构

该技能提供三类工具:校验器(Validators),用于检查 GIF 是否满足 Slack 的要求;动画原语(Animation Primitives),用于构建运动的可组合积木(抖动、弹跳、移动、万花筒等);辅助工具(Helper Utilities),用于常见需求的可选函数(文本、颜色、特效)。资料明确表示,这些工具的应用方式拥有完全创作自由。

核心校验器

使用 GIFBuilder 构建后,在保存时会自动在超出限制时给出警告,返回的 info 字典包含 size_kb、size_mb、frame_count、duration_seconds。

文件体积校验器 check_slack_size 可检查 GIF 是否满足体积限制,返回 (True/False, 详细信息字典)。

尺寸校验器 validate_dimensions 检查尺寸,返回 (True/False, 详细信息字典)。

完整校验可用 validate_gif 运行全部校验,或用 is_slack_ready 做快速检查。

动画原语

这些原语是可组合的运动积木,可应用到任意对象并任意组合:

抖动(Shake):支持以 emoji 等对象抖动,可设置帧数、抖动强度与方向(both、horizontal、vertical)。

弹跳(Bounce):可让圆形等对象弹跳,设置帧数、弹跳高度与颜色。

旋转(Spin / Rotate):支持顺时针旋转、摇摆式旋转(wobble),以及加载指示器(loading spinner)。

脉冲 / 心跳(Pulse / Heartbeat):支持平滑脉冲、心跳式双拍脉冲,以及用于表情 GIF 的注意力脉冲。

淡入淡出(Fade):支持淡入、淡出,以及两个 emoji 之间的交叉淡入淡出。

缩放(Zoom):支持放大、缩小,可加运动模糊,以及爆炸式缩放。

爆炸 / 碎裂(Explode / Shatter):支持爆发、碎裂、溶解为粒子,以及粒子迸发。

摆动 / 颤动(Wiggle / Jiggle):支持果冻式摆动、波浪运动,以及用于表情 GIF 的兴奋摆动。

滑动(Slide):支持从指定方向滑入并带回弹(overshoot)、横向滑过,以及多对象按顺序滑动。

翻转(Flip):支持两个 emoji 之间的水平翻转、垂直翻转,以及用于表情 GIF 的快速翻转。

变形(Morph / Transform):支持交叉淡入式变形、缩放式变形(一方缩小另一方放大)、旋转式变形(类 3D 翻转)。

移动效果(Move):支持线性移动(可设缓动)、弧形移动(抛物线轨迹,可设弧高)、圆形移动(可设圆心、半径、角度范围)、波浪移动(可设波幅与频率),也可直接使用底层缓动函数 interpolate 与 calculate_arc_motion。

万花筒效果(Kaleidoscope):可对单帧应用万花筒(可设分段数),或创建动画万花筒(可设帧数、分段数、旋转速度);也提供更快的简单镜像效果(horizontal、vertical、quad、radial 模式)。

组合原语时可自由混用。资料给出示例:弹跳 + 抖动可营造冲击感——先按缓动计算弹跳位移,当对象接近地面时叠加正弦抖动,再逐帧绘制并加入 builder。

辅助工具

GIF Builder(组装与优化):可设定宽度、高度、帧率,逐帧加入后保存,保存时可选颜色数量与表情优化模式。关键特性包括自动颜色量化、重复帧移除、Slack 体积限制警告、表情模式(激进优化)。

文本渲染:对于表情这类小尺寸 GIF,文字可读性较难,常见做法是加描边。draw_text_with_outline 支持设置位置、字号(如 TYPOGRAPHY_SCALE['h1'] 为 60px)、文字颜色、描边颜色、描边宽度与居中。若要自定义文本渲染,可使用 PIL 的 ImageDraw.text(),对大尺寸 GIF 足够使用。

颜色管理:专业感较强的 GIF 常使用统一配色。可通过 get_palette 获取预制调色板(vibrant、pastel、dark、neon、professional),取出背景色、主色与强调色;也可直接使用 RGB 元组。

视觉效果:提供粒子系统(可发射火花、彩带,并逐帧更新与渲染)、冲击闪光(可设位置、半径)、冲击波圆环(可设位置与半径列表)等可选特效。

缓动函数:使用 interpolate 实现平滑运动(如 ease_in 加速下落、ease_out 减速落地、bounce_out 弹跳、elastic_out 弹性过冲)。可用缓动包含 linear、ease_in、ease_out、ease_in_out、bounce_out、elastic_out、back_out(过冲)等,更多见 core/easing.py。

帧合成:提供基础绘制工具,如 create_gradient_background(渐变背景)、draw_emoji_enhanced(可带阴影的 emoji)、draw_circle_with_shadow(带深度的形状)、draw_star(五角星)。

优化策略

当 GIF 体积过大时,资料给出两类策略:

消息 GIF(超过 2MB):减少帧数(降低帧率或缩短时长)、减少颜色(128 → 64)、缩小尺寸(480x480 → 320x320)、启用重复帧移除。

表情 GIF(超过 64KB):需更激进——总帧数限制在 10-12 帧、颜色最多 32-40、避免渐变(纯色压缩更好)、简化设计(减少元素)、在保存时使用 optimize_for_emoji=True。

示例组合模式

资料给出三个组合示例。简单反应(脉冲):以 128x128、10 FPS 构建,用正弦计算缩放比例使 emoji 脉动,保存为 40 色并开启表情优化,再用 check_slack_size 校验。

带冲击的动作(弹跳 + 闪光):以 480x480、20 FPS 构建,第一阶段物体加速下落,第二阶段落地并在前几帧叠加闪光,随后显示带描边的文字,最后保存为 128 色。

组合原语(移动 + 抖动):先创建抖动动画帧,再构建一个先让物体移动、触发后改用抖动帧并保持物体在最终位置的序列,最后保存。

设计理念

资料强调该工具包提供的是积木而非固定配方。处理 GIF 需求时:先理解创作构想(应发生什么、氛围如何);设计动画(拆分为预期、动作、反应等阶段);按需应用原语(抖动、弹跳、移动、特效可自由混用);校验约束(检查文件体积,尤其是表情 GIF);必要时迭代(超出体积限制则减少帧数或颜色)。目标是在 Slack 的技术约束内实现创作自由。

依赖

资料末尾提到使用该工具包需要安装相关依赖(原文在此处被截断,未完整给出具体依赖列表与安装命令),此部分内容暂未提供。