Labs · 卡瘦身器
给卡瘦身,
别把卡压死。
8MB 的卡图传不上平台——而随手找的压缩器会把角色真正住着的文本块整个剥掉。这个瘦身器只重编码立绘, 卡数据一字不动埋回去,而且拿证据说话:下载按钮出现之前,数据块已经和原文件逐字节比对过了。
把 PNG 角色卡拖进来,或点击选择
.png(带 chara / ccv3 数据块的卡图)
解码、量化、回埋、验真全部发生在你的浏览器里——文件不上传、不留存,页面加载完断网也能用。
瘦身结果会出现在这里。
怎么压 PNG 角色卡才不会压坏?
把文件拆成它真正的两部分:立绘,和载荷。chara / ccv3 数据块从原文件按原始字节整块拷出——不解码、 不重新序列化。只有立绘走压缩管线(降尺寸、量化调色板、重编码成索引色 PNG),然后把原封未动的数据块 拼回新文件第一个图像数据块之前——读卡器期待它们出现的位置。酒馆系导入器(含 Foreverse)读这张 成品和读任何卡没有区别——因为对卡数据来说,什么都没发生过。
它做不到什么(诚实边界)
卡数据本身是地板:JSON 重 900KB 的卡,立绘压到零也小不过这个数——工具一开始就把地板亮给你。 量化天然有损:256 色在立绘上几乎看不出、64 色会有色带,工具会分档说清,而不是全都叫「高清」。 APNG 动图只保得住第一帧。已经被专业优化器压紧的文件,浏览器编码器压不过它——输出更大时, 工具会直接建议你保留原图。
常见问题
为什么不能直接扔进 TinyPNG / 通用压缩器?
因为它们是给图片造的,不是给卡造的。重编码 PNG 会从像素重建整个文件,文本块(tEXt / iTXt / zTXt)全部丢弃——而 chara / ccv3 卡数据恰好就住在那里。图片活下来了,角色死了。这个工具只重编码立绘,然后把原文件的卡数据块整块拼回去,一个字节都不经手。
怎么确定卡数据真的没坏?
是验出来的,不是承诺出来的:下载按钮出现之前,工具把输出文件里的卡数据块提出来,和原文件逐字节比对。对不上就报错、不给下载。每一次压缩都跑这个检查。
「质量档」到底在做什么?PNG 不是没有质量参数吗?
没错——浏览器的 PNG 编码器没有质量旋钮(那个只对 JPEG/WebP 生效),而卡必须留在 PNG 容器里(数据块只能住 PNG)。所以质量档做的是调色板量化:立绘被压到 256 / 128 / 64 色,配 Floyd–Steinberg 抖动,写成真正的索引色 PNG。立绘类图片 256 色档肉眼几乎看不出,体积通常砍一半以上。
为什么我的文件反而变大了?
两个诚实的原因:原图已经被 pngquant 类优化器压到很紧(同等设置下浏览器编码器打不过它),或者原图本来就是索引色图、「无损重编码」把它展开回了全彩。发生这种情况时工具会直说,而不是藏起来——试更小的尺寸档、更狠的质量档,或者接受这张卡不需要瘦身。
卡会被上传吗?
不会。解码、量化、拼块、验真全部用浏览器本地能力完成,任何内容都不发往服务器,页面加载完断网也能用。