图片转GIF
把一张图片转成静态GIF,或把一组图片做成GIF动画,帧率、顺序和循环都由你决定。
把文件拖到这里
.jpg, .jpeg, .png, .webp, .bmp · 最大20 MB
如何生成GIF
- 1
按顺序拖入图片帧
添加的每个文件就是一帧,最多300帧。JPEG、PNG、WebP和BMP都可以,也可以混在一起用。
- 2
设置帧率和循环
按每秒帧数选择速度,决定动画无限循环还是重复固定次数。如果导出的是编了号的序列,可以按文件名重新排序。
- 3
下载GIF
结果只有一个文件,不会是ZIP。这个工具的意义就在于把许多张图片变成一个动画。
GIF能做什么,不能做什么
GIF是1989年的格式,这一点看得出来。每一帧最多只有256种颜色的调色板;透明度是每个像素上的一个开关,而不是平滑的透明通道。由此带来两个结果,都不是这个工具的问题。第一,有柔和渐变的照片会出现明显的色彩噪点,因为要用256种颜色代替几百万种,差异以抖动的方式分散开。第二,柔和阴影渐渐过渡到透明的图片会出现硬边,因为每个像素要么完整画出,要么完全没有。如果这些对你很重要,动态WebP或AVIF能保留多得多的原图细节,结果卡片上的处理链有这两个工具的链接。
整个动画共用一个调色板
颜色是从所有帧里同时均匀采样的,再用全部样本一起生成一个调色板。如果每帧单独生成,单张画面会略微准确一点,但看起来要糟糕得多:调色板会逐帧变化,平坦的区域会明显闪动。画布尺寸也是同样的道理:最终顺序里的第一帧决定尺寸,其他每一帧都按原比例缩放到画布里面,空出的地方填白色;如果那一帧本身有透明通道,就填透明。任何内容都不会被裁掉。
帧率没有你想的那么精细
GIF以百分之一秒为单位记录每帧的延迟,所以不是每个帧率都能精确实现。每秒10帧正好是10个单位;12帧变成8个单位,实际是每秒12.5帧;30帧变成3个单位,实际约为33帧。工具会取最接近的可用值,不会假装做到了精确。实际使用中,照片序列用8到15帧就显得流畅;每张图都需要看清的幻灯片式动画,用2到5帧效果更好。
文件留在你的设备上
解码、生成调色板和GIF编码都在这个浏览器标签页里完成,用的是WebAssembly解码器和JavaScript编码器。不会上传任何内容,帧不会存储在任何地方,关闭标签页就会把所有内容从内存中清除。这一点在这里比平时更重要,因为一组帧往往是一整次拍摄的照片。
常见问题
为什么我的GIF看起来有颗粒感?
因为要用256种颜色代替原图里的几百万种。你看到的斑点纹理就是抖动:故意撒下的细小颜色误差,从远处看平均颜色是对的。你可以关掉抖动,代价是斑点换成明显的色带;也可以减少调色板颜色数,主动接受更强的色调分离效果。
最多能添加多少帧?
最多300个文件,每个20 MB,总计150 MB,每帧上限1600万像素。300帧加上最大的画布尺寸时,生成GIF大约需要25秒;画布小一些会快得多。
怎么控制帧的顺序?
默认按文件列表里的顺序排列,可以在列表里拖动调整。如果拖入的是导出的序列,切换到“按文件名”。它按自然顺序排序,所以frame2排在frame10前面,而不是后面。“倒序”会把添加时的顺序整个反过来。
文件里的无限循环是什么意思?
它会写入一个重复次数为零的NETSCAPE2.0应用扩展块,所有查看器都会把它读成“无限重复”。次数为3表示动画播放一遍后再重复三次,最后停在最后一帧。单张图片不会写入循环块,因为只有一帧的GIF就是一张静态图。
为什么透明部分的边缘参差不齐?
GIF的透明度只有一位:一个像素要么画出来,要么不画。原图里半透明的部分,比如圆形抗锯齿的边缘或柔和的投影,都必须被强制归到其中一边,平滑的过渡就变成了硬边界。转换前给图片帧加上纯色背景,效果通常比让边缘碎掉要好。
能用一张照片做GIF吗?
能。只有一个文件时,结果是单帧的静态GIF,帧率和循环选项不再起作用,文件名沿用原文件。这是正当的用法:有些论坛和聊天软件接受GIF,却不接受其他格式。
这和视频转GIF有什么不同?
这个工具处理的是你手上已经分成单独文件的静态图片,每张一帧。视频转GIF工具要先解码视频流,再决定抽取哪些帧。如果你手上是MP4或MOV,从那个工具开始;如果是导出的图片序列或几张照片,这里就对了。
文件会上传到服务器吗?
不会。每一帧的解码、量化和编码都在你的浏览器里完成。任何环节都没有上传,服务器上也没有副本。