slack-gif-creator

用于创建针对 Slack 优化的动画 GIF 的知识和实用工具。提供约束、验证工具和动画概念。当用户请求 Slack 的动画 GIF 时使用,例如"为 Slack 制作一个 X 做 Y 的 GIF"。

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "slack-gif-creator" with this command: npx skills add marcelleon/skills-zh/marcelleon-skills-zh-slack-gif-creator

Slack GIF Creator

一个工具包,提供用于创建针对 Slack 优化的动画 GIF 的实用工具和知识。

Slack 要求

尺寸:

  • 表情符号 GIF:128x128(推荐)
  • 消息 GIF:480x480

参数:

  • FPS:10-30(较低的文件大小更小)
  • 颜色:48-128(更少 = 更小的文件大小)
  • 持续时间:表情符号 GIF 保持在 3 秒以下

核心工作流程

from core.gif_builder import GIFBuilder
from PIL import 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 加载和处理图像:

from PIL import Image

uploaded = Image.open('file.png')
# 直接使用,或仅作为颜色/风格的参考

从头开始绘制

从头开始绘制图形时,使用 PIL ImageDraw 基元:

from PIL import 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)

不要使用: 表情符号字体(跨平台不可靠)或假设此技能中存在预包装的图形。

使图形看起来更好

图形应该看起来精致而富有创意,而不是基础的。以下是方法:

使用更粗的线条 - 始终为轮廓和线条设置 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 要求:

from core.validators import validate_gif, is_slack_ready

# 详细验证
passes, info = validate_gif('my.gif', is_emoji=True, verbose=True)

# 快速检查
if ady('my.gif'):
    print("准备好了!")

缓动函数 (core.easing)

平滑运动而不是线性:

from core.easing import 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)

常见需求的便捷函数:

from core.frame_composer import (
    create_blank_frame,         # 纯色背景
    create_gradient_background,  # 垂直渐变
    draw_circle,                # 圆形助手
    draw_text,                  # 简单文本渲染
    draw_star                   # 5 角星
)

动画概念

摇晃/震动

用振荡偏移对象位置:

  • 使用 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(image1, image2, alpha)
  • 淡入:alpha 从 0 到 1
  • 淡出:alpha 从 1 到 0

滑动

将对象从屏幕外移动到位置:

  • 起始位置:帧边界外
  • 结束位置:目标位置
  • 使用 interpolate()easing='ease_out' 平滑停止
  • 对于过冲:使用 easing='back_out'

缩放

缩放和定位以实现缩放效果:

  • 放大:从 0.1 缩放到 2.0,裁剪中心
  • 缩小:从 2.0 缩放到 1.0
  • 可以添加运动模糊以增加戏剧性(PIL 过滤器)

爆炸/粒子爆发

创建向外辐射的粒子:

  • 生成具有随机角度和速度的粒子
  • 更新每个粒子:x += vxy += vy
  • 添加重力:vy += gravity_constant
  • 随时间淡出粒子(减少 alpha)

优化策略

仅当被要求使文件大小更小时,实施以下几种方法:

  1. 更少的帧 - 较低的 FPS(10 而不是 20)或更短的持续时间
  2. 更少的颜色 - num_colors=48 而不是 128
  3. 更小的尺寸 - 128x128 而不是 480x480
  4. 删除重复项 - 在 save() 中使用 remove_duplicates=True
  5. 表情符号模式 - optimize_for_emoji=True 自动优化
# 表情符号的最大优化
builder.save(
    'emoji.gif',
    num_colors=48,
    optimize_for_emoji=True,
    remove_duplicates=True
)

哲学

此技能提供:

  • 知识:Slack 的要求和动画概念
  • 实用工具:GIFBuilder、验证器、缓动函数
  • 灵活性:使用 PIL 基元创建动画逻辑

它不提供:

  • 僵化的动画模板或预制函数
  • 表情符号字体渲染(跨平台不可靠)
  • 内置于技能中的预包装图形库

关于用户上传的说明:此技能不包含预构建的图形,但如果用户上传图像,请使用 PIL 加载并处理它 - 根据他们的请求解释他们是希望直接使用它还是仅作为灵感。

发挥创意!组合概念(弹跳 + 旋转、脉动 + 滑动等)并使用 PIL 的全部功能。

依赖项

pip install pillow imageio numpy

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

xlsx

No summary provided by upstream source.

Repository SourceNeeds Review
General

skill-creator

No summary provided by upstream source.

Repository SourceNeeds Review
General

frontend-design

No summary provided by upstream source.

Repository SourceNeeds Review
General

internal-comms

No summary provided by upstream source.

Repository SourceNeeds Review