📦 Slack Gif Creator — Slack Gif 创建器
v1.0.0用于创建适用于Slack的动画GIF的知识和工具。提供约束、验证工具和动画概念。当用户请求...
运行时依赖
安装命令
点击复制技能文档
Slack GIF 创建工具 一个提供实用工具和知识的工具包,用于创建适用于 Slack 的动画 GIF。 Slack 要求 尺寸: Emoji GIF:128x128(推荐) 消息 GIF:480x480 参数: FPS:10-30(越低,文件大小越小) 颜色:48-128(越少,文件大小越小) 时长:Emoji GIF 的时长应控制在 3 秒以内 核心工作流程 从 core.gif_builder 导入 GIFBuilder 从 PIL 导入 Image,ImageDraw # 1. 创建构建器 builder = GIFBuilder(width=128, height=128, fps=10) # 2. 生成帧 for i in range(12): frame = Image.new('RGB', (128, 128), (240, 248, 255)) draw = ImageDraw.Draw(frame) # 使用 PIL 原语绘制动画(圆圈、多边形、线条等) builder.add_frame(frame) # 3. 保存并优化 builder.save('output.gif', num_colors=48, optimize_for_emoji=True) 绘制图形 处理用户上传的图像 如果用户上传图像,考虑他们是否希望: 直接使用(例如“动画化这个”,“将其分割成帧”) 将其用作灵感(例如“制作类似这样的东西”) 使用 PIL 加载和处理图像: 从 PIL 导入 Image uploaded = Image.open('file.png') # 直接使用或仅作为颜色/样式的参考 从头开始绘制 从头开始绘制图形时,使用 PIL ImageDraw 原语: 从 PIL 导入 ImageDraw draw = ImageDraw.Draw(frame) # 圆圈/椭圆 draw.ellipse([x1, y1, x2, y2], fill=(r, g, b), outline=(r, g, b), width=3) # 星形、三角形、任意多边形 points = [(x1, y1), (x2, y2), (x3, y3), ...] draw.polygon(points, fill=(r, g, b), outline=(r, g, b), width=3) # 线条 draw.line([(x1, y1), (x2, y2)], fill=(r, g, b), width=5) # 矩形 draw.rectangle([x1, y1, x2, y2], fill=(r, g, b), outline=(r, g, b), width=3) 不要使用: Emoji 字体(在不同平台上不可靠) 假设预先包装的图形存在于此技能中 使图形看起来好 图形应看起来精致和创意,而不是基本的。以下是方法: 使用较粗的线条 - 总是将 width 设置为 2 或更高用于轮廓和线条。 细线(width=1)看起来很粗糙和业余。 添加视觉深度: 使用渐变背景(create_gradient_background) 分层多个形状以增加复杂性(例如,星形内嵌一个较小的星形) 使形状更有趣: 不要只是画一个简单的圆圈 - 添加高光、环或图案 星形可以有光环(在后面绘制较大的、半透明的版本) 组合多个形状(星形 + 闪光、圆圈 + 环) 注意颜色: 使用鲜艳的、互补的颜色 添加对比度(在浅色形状上使用深色轮廓,在深色形状上使用浅色轮廓) 考虑整体构图 对于复杂的形状(心形、雪花等): 使用多边形和椭圆的组合 仔细计算点以实现对称性 添加细节(心形可以有高光曲线,雪花有复杂的分支) 要创意和详细! 一个好的 Slack GIF 应该看起来精致,而不是像占位符图形。 可用工具 GIFBuilder(core.gif_builder) 组装帧并优化以适用于 Slack: builder = GIFBuilder(width=128, height=128, fps=10) builder.add_frame(frame) # 添加 PIL Image builder.add_frames(frames) # 添加帧列表 builder.save('out.gif', num_colors=48, optimize_for_emoji=True, remove_duplicates=True) 验证器(core.validators) 检查 GIF 是否符合 Slack 要求: 从 core.validators 导入 validate_gif,is_slack_ready # 详细验证 passes, info = validate_gif('my.gif', is_emoji=True, verbose=True) # 快速检查 if is_slack_ready('my.gif'): print("准备好了!") 缓动函数(core.easing) 平滑运动而不是线性: 从 core.easing 导入 interpolate # 进度从 0.0 到 1.0 t = i / (num_frames - 1) # 应用缓动 y = interpolate(start=0, end=400, t=t, easing='ease_out') # 可用:linear, ease_in, ease_out, ease_in_out, # bounce_out, elastic_out, back_out 帧帮助器(core.frame_composer) 用于常见需求的便捷函数: 从 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) 对于摇晃:使用带有 math.sin() 的 sine 波 摇晃 使用带有 math.sin() 的正弦波