Add a caption to the first frame of a GIF and export a clean PNG — free, no watermark, and your file never leaves your device. Read the honest note below about animated GIFs.给 GIF 的首帧加上字幕,导出干净的 PNG——免费、无水印,文件永远不会离开你的设备。关于动态 GIF 请看下面的如实说明。
No, and we say so honestly. A browser can only draw the first frame of an animated GIF to canvas, and re-encoding every frame needs a bundled GIF encoder. This tool exports a high-resolution PNG of the first frame.
不能,我们如实说明。浏览器只能把动态 GIF 的首帧画到画布,重新编码每一帧需要内置 GIF 编码器。本工具导出的是首帧高清 PNG。
Use it as a static caption card, a thumbnail, a Discord sticker, or upload it to any platform that accepts PNG.
可作静态字幕卡、缩略图、Discord 贴纸,或上传到任何接受 PNG 的平台。
We keep the page 100% offline and dependency-free. A full GIF decoder/encoder is a large library that would slow the page and break the file:// offline promise.
我们坚持本页 100% 离线、零依赖。完整的 GIF 解码/编码库体积很大,会拖慢页面、破坏 file:// 离线可用的承诺。
Yes. Free, no watermark, no sign-up, and your GIF never leaves your device.
是的。免费、无水印、无需注册,你的 GIF 永远不会离开你的设备。
Animated GIFs are a clever but old container: a sequence of small palette-indexed frames, each with its own delay and a "disposal" rule that says how to clear the screen before the next frame draws. When you drop a GIF into an HTML <img> tag, the browser's internal player animates it beautifully. But the moment you try to draw that same GIF onto a canvas — which is the only way to edit it in pure JavaScript — almost every browser hands you the first frame only. The internal decoder exposes no per-frame API to web pages. To caption every frame, a web app would have to (1) parse the GIF binary itself, (2) run its LZW decompressor on every frame, (3) composite the frames according to disposal rules, (4) draw your caption on each, and (5) re-encode the whole thing back into animated GIF bytes with its own LZW compressor. That is roughly a thousand lines of fiddly binary code, and the result needs a bundled library — which directly conflicts with this site's promise of a zero-dependency, offline, double-click-the-file tool. So instead of pretending, we built what genuinely works: read the first frame, caption it, export a crisp PNG.
动态 GIF 是一种巧妙但古老的容器:一串调色板索引的小帧,每帧带自己的延时和「处置规则」(下一帧绘制前如何清屏)。当你把 GIF 放进 HTML <img> 标签,浏览器内置播放器会漂亮地动起来。但一旦你想把同一张 GIF 画到 canvas 上——而这是纯 JS 编辑它的唯一办法——几乎所有浏览器都只给你第一帧。内置解码器不向网页暴露逐帧接口。要给每一帧加字,网页应用必须:(1) 自己解析 GIF 二进制,(2) 对每帧跑 LZW 解压,(3) 按处置规则合成帧,(4) 逐帧绘制字幕,(5) 用自己的 LZW 压缩器把整段重新编码回动态 GIF 字节。这是大约一千行容易出错的二进制代码,而且结果需要打包一个库——这直接违背本站「零依赖、离线、双击文件即用」的承诺。所以我们不装,而是做真正可行的事:读首帧、加字幕、导出清晰 PNG。
If the joke really depends on motion — a cat walking, a button pressing, a loop that surprises on the third pass — a still PNG loses it. In that case the honest path is to edit the original file in a desktop or web editor that already bundles a GIF encoder (most online "GIF caption" tools do, at the cost of uploading your file to their server). We are not that tool, and we would rather say so than ship a fake preview that exports the wrong thing. For still-image memes where a caption matters, our Classic Meme Maker gives you the full top-and-bottom treatment, and the Meme Caption Editor lets you place text anywhere. Read our longer take on the trade-offs in GIF vs Video Meme: Which Format When.
如果笑点真的依赖动作——猫在走、按钮在按、第三遍循环才反转——静态 PNG 就丢了它。这时诚实的做法是去用一个已经内置 GIF 编码器的桌面或网页编辑器(大多数在线「GIF 加字」工具确实有,但代价是把文件上传到他们服务器)。我们不是那种工具,我们宁愿明说,也不愿给你一个假预览、最后导出错误的东西。对于字幕才是重点的静态表情包,经典表情包生成器给你完整上下字幕,表情包字幕编辑器让文字任意摆放。关于取舍的更长讨论见GIF 与视频表情包:何时用哪种。
Because the whole job runs in your browser, your GIF never touches our server — we never even see the file. The page works offline, there is no account, and the export is a direct canvas.toDataURL download on your own machine. If you want a transparent version of your cut-out for sticker packs, run the result through our Transparent Sticker Maker. Your images never leave your device.
由于整个处理都在浏览器里跑,你的 GIF 从不经过我们的服务器——我们根本看不到这个文件。页面离线可用、没有账号,导出就是你本机上一次直接的 canvas.toDataURL 下载。如果想把抠出来的部分做成贴纸包用的透明底,就把结果放进透明贴纸制作器。你的图片永远不会离开你的设备。
Because you only get one frame, picking it matters. Most animated GIFs loop through a small cycle, and one moment in that cycle carries the most information: the exact freeze frame of a reaction, the peak of a gesture, the split second before something falls over. When you upload a GIF here, the browser gives you the very first frame, which is often not the funniest one. The practical workaround is simple — open the GIF on your phone or computer, watch it loop, and pause on the frame you want. Then take a quick screenshot, crop it, and upload that still image instead of the GIF. You get full control over which moment your caption sits on, and the exported PNG looks identical in quality. Treat this tool as a "first frame plus your own chosen frame" captioner: for reaction shots, the chosen screenshot almost always wins.
既然只能选一帧,选哪帧就很关键。大多数动态 GIF 在一个小循环里重复,而循环中总有一个瞬间信息量最大:反应表情定格的那一刹那、手势的顶点、东西倒下前的零点几秒。你在这里上传 GIF 时,浏览器给你的是第一帧——而它往往不是最好笑的那一帧。实际变通很简单:在手机或电脑上打开 GIF,看它循环,停在你想要的那一帧,快速截屏、裁一下,然后上传那张静图而不是 GIF。这样你能完全控制字幕落在哪一刻,导出的 PNG 画质毫无差别。把本工具理解成「首帧加你自己挑的帧」的加字器:对反应图来说,自己挑的截图几乎总是赢。
You have probably seen pages that promise "add text to GIFs online" and then silently either watermark the result, ask you to sign up, or export a strangely frozen frame nobody notices. We took the other road. A caption card tool that lies about its output is worse than no tool, because it wastes your time after you already did the work. This page tells you up front, on a colored notice, what it does and does not do, so you never download a file expecting animation and finding a still. That honesty is the same promise behind the rest of this site: no fake AI, no hidden uploads, no feature you have to pay to discover is broken. If per-frame GIF captions ever become something we can do without shipping a megabyte of encoder and breaking the offline file, you will find it here — announced plainly, not smuggled in as a surprise.
你大概见过那种承诺「在线给 GIF 加字」的页面,然后悄悄加水印、要你注册,或者导出一个没人注意的奇怪定格帧。我们走了另一条路:一个对输出撒谎的字幕工具,比没有工具更糟,因为它在你都做完功课后浪费你的时间。本页在最前面用一条彩色提示明说它能做什么、不能做什么,这样你绝不会带着「应该是动画」的期待下载一个静图。这份诚实和本站其余部分是同一个承诺:不假装 AI、不偷偷上传、没有那种「付了钱才发现是坏的」的功能。如果逐帧 GIF 加字将来能在不塞一兆编码器、不破坏离线文件的前提下做到,你会在这里看到它——明明白白地发布,而不是当成惊喜偷塞进来。
Upload a GIF above, type your top and bottom lines, and download a captioned PNG — fast, free, and exactly what this page honestly does.
在上方上传 GIF,写好上下两行,下载带字幕的 PNG——快速、免费,而且正是本页诚实地做到的事。