精灵图生成器

正在恢复所选文件……

拖入一批图片,生成器会把它们排布到均匀网格上,并在浏览器中绘制成一张精灵图 PNG,随后输出为每个精灵带一个 background-position 偏移的 CSS。所有处理都在画布(canvas)上本地完成,因此不会向服务器上传任何内容。适合图标集、复古游戏帧,以及你想用单个文件而非许多独立图片的界面状态。你可以控制列数、瓦片尺寸、单元格间距和背景(透明、白色或黑色)。

精灵图是如何生成的

  1. 1

    拖入你的图片

    添加 PNG、JPG 或 WebP 文件。用上/下按钮重新排序或删除任意帧;图表会立即重建。

  2. 2

    设置网格

    选择列数;行数由你添加的图片数量决定。每张图片会在保持宽高比的前提下缩放以适配一个正方形瓦片,并居中。

  3. 3

    调整瓦片尺寸和间距

    以像素为单位选择瓦片尺寸,并在单元格之间加入间距,以避免缩放时相邻精灵相互渗色。

  4. 4

    下载 PNG 并复制 CSS

    把精灵图保存为单个 PNG,并复制生成的 CSS 类:每张图片一条带宽度、高度和 background-position 的 `.spr-名称` 规则。

布局如何工作

生成器使用一种可预测的单一布局:均匀网格。你设定列数,行数则为 向上取整(图片数 / 列数)。每个单元格都是相同的正方形尺寸(你选择的瓦片尺寸),因此每张图片会在保持宽高比的前提下缩放以适配其单元格,并居中。尺寸不一的图片最终都落入相同大小的单元格,这正是使用 background-position 的 CSS 精灵所期望的。

控制项 范围 作用
列数 1 到 16 每行的精灵数;行数自动计算
瓦片尺寸 32 到 512 px 每张图片被适配进的正方形单元格
间距 0 到 64 px 单元格之间的透明间隙,缩放时防止渗色
背景 透明 / 白色 / 黑色 输出 PNG 中精灵背后的填充

生成的 CSS 形态

每张图片会变成以其文件名命名的类(.spr-<名称>),尺寸等于瓦片,并偏移到其单元格。当列数为 4、瓦片尺寸为 128 px 且无间距时,图表如下所示:

.spr-idle  { width: 128px; height: 128px; background: url(spritesheet.png) -0px -0px; }
.spr-walk  { width: 128px; height: 128px; background: url(spritesheet.png) -128px -0px; }
.spr-run   { width: 128px; height: 128px; background: url(spritesheet.png) -256px -0px; }
.spr-jump  { width: 128px; height: 128px; background: url(spritesheet.png) -384px -0px; }
.spr-fall  { width: 128px; height: 128px; background: url(spritesheet.png) -0px -128px; }

偏移在两个方向上移动:精灵从左到右填满每一行,然后换到下一行。把 PNG 保存为与你的 CSS 相邻的 spritesheet.png(或修改 url(...) 以匹配你的路径)。

间距与渗色

边对边紧密排布的精灵在浏览器缩放图表时(非整数像素比、CSS 变换)可能相互渗色。在单元格之间加入 2 到 4 像素的间距,防止相邻像素渗入。

高密度(Retina)屏幕

没有自动的 2x 导出,但你可以用简单的办法得到更清晰的图表:选择更大的瓦片尺寸(例如 256 px 而非 128 px),让每个精灵携带更多像素,然后在 CSS 中以一半尺寸显示。这样无需单独的处理过程,就能在高密度屏幕上获得清晰的精灵。

精灵图与替代方案

  • 精灵图: CSS 中的经典图标集、HTML5 游戏帧,以及从把许多小图片合并为一个文件中获益的页面。
  • SVG 精灵(symbol): 更适合现代界面图标,无损缩放,接受 CSS fill,无需摆弄 background-position
  • 图标字体: 有限,但仍用于极小的单色图标。
  • 搭配 HTTP/2 或 HTTP/3 的独立文件: 多路复用让请求数量不再像过去那样重要。

常见问题

图片保留在浏览器中。在多步骤流程中,此浏览器会将所选图片文件和布局暂时保留在这个标签页内,最长30分钟。不会向服务器发送任何内容,也不会将任何内容添加到URL。

可以,不过内联 SVG 或 SVG <symbol> 精灵通常更契合组件框架。当静态页面同时显示大量图片时,CSS 精灵图最能发挥优势。

把列数设为你的帧数,让每帧位于一行,然后用 CSS animation-timing-function: steps(N) 和逐格跳动的 background-position 来驱动。适合简短的循环动画(加载指示、空闲状态)。

网格的每个单元格都是相同的正方形尺寸(你选择的瓦片尺寸),因此每张图片都被适配进其单元格并居中。如果你的精灵本就是相同的正方形,把瓦片尺寸设为一致,它们就会原样通过。

相关工具