帧工坊 FrameCraft 帧工坊 FrameCraft

图片多尺寸导出:一张图,一次拿齐 @1x/@2x/@3x、安卓五档、iOS 图标和 ICO

素材做完了才发现问题:iOS 要 8 个尺寸、安卓要 5 个目录、网页还要 @2x @3x、桌面端再来个 .ico——同一张图得手动导出十几遍,还老是有几个尺寸忘了、命名写错。这一页把这件事一次做完:选一个规格包,剩下的它全出,每张都给实测体积和最终文件名,导出就是按目录分好的 ZIP。另外两件容易被忽略的事我们也做了:大幅缩小会自动逐级减半(直接缩会产生摩尔纹,这不是玄学,页面里给你实测数字),像素图放大走 nearest(默认插补会把像素画糊成一片)。全程浏览器本地处理,图片不上传服务器。

批量拖入 · 7 套规格包 · 等比留边/裁切填满 · 逐级减半防混叠 · 像素 nearest · 偶数对齐 · PNG/WebP/JPEG · 导出 ZIP / ICO

1
把图拖进来
📐

把图片拖进来,或点这里选

PNG / JPG / WebP,最多 6 张,每张都会出整套尺寸

本地处理不上传,原始尺寸就是 @1x 基准
还没上传图片
2
选一套规格,看每档实测多大
规格 决定导出哪几档
规格包
@1x 基准 源图尺寸不一时选「统一指定」,一批图就能按同一个基准出
适配 目标框不是同比例时怎么办
适配方式 尺寸对齐 视频编码、ETC 纹理、部分引擎要求偶数尺寸
画质 缩放算法决定会不会糊
缩放算法
输出格式
3
点网格里任意一档,左右看清楚
—
原始
还没选
输出这一档
还没选
ZIP 按目录分好(安卓包会分成 drawable-* 目录);ICO 是单独一个文件,含全部档位
等待处理

怎么用

  1. 拖入图片:可以一次多张,每张都会各出整套尺寸。没有素材先点「载入示例」——那三张是故意挑的:像素图(测放大糊不糊)、1px 棋盘格高频图(测摩尔纹)、带透明的图标(测 @2x/@3x 与对齐)。
  2. 选规格包:网页用 @1x/2x/3x;安卓用 mdpi→xxxhdpi(自动分 drawable 目录);上架 iOS 用 App 图标;做纹理用 mipmap 链;桌面程序用 ICO。都不合适就用「自定义倍率」。
  3. 确认 @1x 基准:默认「以各自原图为 @1x」。如果手上一批图原始尺寸参差不齐,改成「统一指定 @1x 宽度」,它们就会按同一个基准出,大小关系才对得上。
  4. 看缩放算法:照片和插画用「平滑」;像素画一定要切成「像素(nearest)」,否则放大会糊成一片。大幅缩小保持「逐级减半」开着。
  5. 看实测体积:网格里每格都给了真实编码后的体积和最终文件名,不用导出才知道有多大。
  6. 导出:ZIP 拿整套,或单独下载 ICO / 当前这一张。

常见问题

为什么要一次导出一套,自己一张张改不行吗?

行,但容易漏。iOS 上架要 8 个尺寸、安卓要 5 个目录、网页还要 @2x @3x,桌面端再来个 .ico——同一张图十几个文件,手动做必然有漏的、命名写错的、某个尺寸忘了换的。而它们是同一张源图、同一套参数,本来就该一次性算完。另外这里每档都是从原图重新算,不是拿上一档再缩放——后者会让 @3x 变成「@2x 再放大 1.5 倍」,糊两遍。

「逐级减半」是什么?真的有用还是心理作用?

有用,但要看条件——我们把三种条件都实测了,不吹。canvas 缩放的本质是 box filter,一次缩小超过 2 倍就会跳着采样:一张 1px 黑白棋盘格直接缩到 1/12,采到的点不均匀,结果会留下一堆随机黑块白块(摩尔纹);而每步只缩一半(512→256→128→64→…),每个像素都被平均过,结果才是均匀的灰。用 512×512 的 1px 棋盘格实测(理想结果应是一片均匀灰,标准差越接近 0 越好):

条件逐级减半一步到位结论
低质量档 + 非整数倍(512→40,12.8 倍)040.6差距巨大,一步到位会糊成摩尔纹
高质量档 + 非整数倍(512→40)00浏览器自己已经做了多级,两者一样
任意档 + 整数倍(512→64,8 倍)00box filter 完美平均,连低质量都不混叠

所以我们的结论是反直觉的:默认开着没坏处,但如果你用的是「平滑」档,关掉它能省时间,画质完全一样;只有在「低」质量档下它才真正必需。页面顶部的汇总条会按你当前的设置,把这两个数实时算给你看,并直接告诉你该开还是该关——不用记这张表。

像素图放大为什么会糊?该怎么选?

因为默认缩放是插补:它会在原有像素之间「算」出新颜色,一个 8×8 的小人放大 4 倍就变成一片模糊的色块,像素画的硬边全没了。把「缩放算法」切成 像素(nearest) 就不一样了——它只复制原有像素,不制造新颜色。这个也能验证:示例那张 64×64 像素角色放大 3 倍后,用 nearest 得到的不同颜色数是 6 种 种,和原图 6 种 种完全一样;用平滑插补则是 329 种 种——多出来的全是插补造的。

@1x 基准是什么?手上这批图尺寸不一怎么办?

@1x 就是「一倍图」。默认每张图以自己的原尺寸作为 @1x,@2x 就是两倍宽高。但你手上如果是一批原始尺寸参差的图(有 1024 的、有 300 的),按各自基准出来的 @2x 互相之间大小关系就乱了。这时把基准改成 「统一指定 @1x 宽度」(比如都按 512 算),它们才会按同一个尺子出,摆在一起才对得上。做完这步再去图标规整统一视觉分量,效果最好。

各平台到底要哪些尺寸?

这里把常用的都做成规格包了,选一下就行:

规格包会导出文件怎么放
Web / 小程序 @1x @2x @3x1 倍、2 倍、3 倍平铺,文件名带 @2x 后缀
Android mdpi → xxxhdpi1x / 1.5x / 2x / 3x / 4x自动分到 drawable-mdpi … drawable-xxxhdpi 目录
iOS App 图标40 / 58 / 60 / 80 / 87 / 120 / 180 / 1024方形,默认按裁切填满(App 图标不接受透明边)
小游戏常用64 / 128 / 256 / 512平铺,文件名带尺寸后缀
纹理 mipmap 链从 2 的幂一路减半到 1平铺,文件名带边长,引擎按顺序读
ICO 图标16 / 32 / 48 / 64 / 128 / 256合成单个 .ico 文件

没有你要的就选「自定义倍率」,比如填 0.5, 1, 1.5, 2, 3。

ICO 是怎么生成的?为什么体积这么小?

.ico 其实只是一个容器:一个 6 字节的头 + 每档 16 字节的索引,后面接着每档的图像数据。很多在线工具在里面塞的是未压缩的 BMP——光 256 那一档就要 256×256×4 ≈ 262 KB。我们塞的是 PNG(Vista 之后的系统和主流看图软件都认),同一档只要 8.1 KB,整个多档 ICO 才 14.3 KB。还有个细节:索引里宽高各只有 1 个字节,256 存不下,规范约定用 0 表示 256——写错就会被识别成 0 尺寸打不开。

mipmap 链是什么?为什么非要 2 的幂?

mipmap 是给 3D 纹理用的一套「从大到小」的图:物体远的时候用小的那张,就不会因为采样不足而闪烁。规范要求每一级是上一级的正好一半,所以边长必须是 2 的幂(512 / 256 / 128 …)。如果你的图是 600×600 这种非 2 的幂,工具会先向上对齐到 1024 再开始减半——这会带来轻微形变,所以做纹理时最好一开始就按 2 的幂出图。

「尺寸对齐偶数 / 4 的倍数」什么时候必须?

三种情况会卡住:① 视频编码(H.264 等要求宽高都是偶数);② 部分压缩纹理格式(ETC、PVRTC 要求边长是 4 的倍数甚至 2 的幂);③ 某些老引擎和贴图工具会直接拒绝奇数尺寸。缩放算出来的尺寸经常是奇数(比如原图 333 宽出 @1.5x 得到 499.5),所以这里给了对齐选项,勾上就不会踩到。

收费吗?图片会上传吗?

免费,无水印、无需注册。缩放和编码都在浏览器本地用 canvas 完成,图片不经过任何服务器。

相关工具