将APNG转换为GIF
动态PNG就是色彩更好的GIF,可半个互联网都把它当成静态图。把它转成在您发布的地方真正能动的GIF,每一帧都保留。不存储任何文件。
- 绝不存储
- 无需排队,无需等待
- 无需注册,无水印
使用方法
添加动态PNG
它们通常以.png命名,有时是.apng,两种都可以。普通PNG也能转换,结果是单帧GIF。
转换
每一帧都会按各自的时间间隔读取,并用根据图片生成的调色板写入GIF——256色,想要更小的文件也可以更少。
下载
逐个保存,或打包为ZIP下载。每一行都会显示保留了多少帧。
APNG是什么
APNG是一个普通的PNG,多插入了三种数据块——acTL宣告这是动画,fcTL位于每一帧之前,记录该帧的尺寸、位置、延迟以及如何处理上一帧,fdAT则存放该帧的像素——这样插入,不认识这些数据块的查看器看到的就是一张普通的静态PNG。这种向后兼容在2004年是设计的初衷,如今却成了问题:只检查文件头的软件会把它归类为“图片”,再也不往下看。
每一帧都按文件的指示合成——帧可以只覆盖画布的一部分,并与原有内容混合或替换原有内容——形成完整的画面,然后量化为调色板,以相同的延迟写入GIF。量化器根据每一帧本身生成256种颜色并加上抖动;扁平插画和像素风贴纸——APNG的大部分内容就是这些——转换后基本没有变化。低于20毫秒的延迟会被提高到100毫秒,浏览器对GIF本来也是这样处理的。
透明度会变成一位的那种:一个像素要么显示,要么不显示。带柔和阴影的APNG贴纸会在一半不透明度处被切出清晰的边缘。这是GIF的限制,而不是转换的限制,唯一的办法是换用真正支持Alpha通道的格式——在目的地能播放的情况下,用WebP。
如果您需要的是别的
ffmpeg能读取APNG,并用两遍调色板写出GIF:ffmpeg -i in.png -vf "split[a][b];[a]palettegen[p];[b][p]paletteuse" out.gif。它还提供本页面没有的抖动选项,这在渐变上很重要。
如果目的地能播放APNG——所有现款浏览器都可以,iMessage和大多数贴纸平台也可以——那就保留APNG。它有真正的透明度和完整的色彩,而GIF只是一份更大、更差的兼容性副本。
常见问题
怎么知道我的PNG是不是动态的?
在Chrome、Firefox或Safari中打开它:这三个都能播放APNG,所以如果它在那里会动,而在您发布的地方不动,它就是APNG,本页面正适合您。这里的那一行也会显示找到了多少帧。
GIF会保留时间间隔吗?
会。两种格式中每一帧都带有自己的延迟,会被原样复制过来,所以12帧的弹跳动画仍然是12帧,速度也相同。
为什么GIF看起来颗粒感更重?
APNG的每一帧有1600万种颜色和平滑的透明度;GIF的每一帧只有256种颜色,也没有半透明。调色板根据图片生成并加上抖动,颗粒感就是这样来的。扁平插画——APNG最常见的内容——几乎看不出来。
不是动态的PNG会怎样?
它会被转换为单帧GIF,那一行也会注明。对于静态图,您几乎肯定应该保留PNG,或者用PNG转WebP得到更小的文件。
我的文件会被存储在任何地方吗?
不会——任何环节都不会存储任何文件。
为什么Discord或Slack把我的贴纸显示成静态图?
很多上传表单识别出PNG文件头后,就把文件当作静态图片处理,只保留第一帧。同样这些服务却能完整播放GIF。转换是可靠的解决办法;在支持的地方,另一个选择是WebP。
小贴士: GIF每一帧只能容纳256种颜色,也不支持半透明,所以柔和的边缘会变得生硬,渐变会出现轻微色带。读取APNG的帧需要较新版本的Chrome、Edge或Opera;在其他浏览器中,只会把第一帧写成静态图,那一行也会注明。
把这个工具放到您的网站上
博客、课程页面或帮助文章均可免费使用。粘贴一段代码,访客就能直接在您的页面上使用。