导出 PNG 发虚通常分三类:一是边缘发毛,像是被轻轻抹过;二是线条不锐利,1px 线像 0.5px;三是文字发灰或粗细不一致。不同的「虚」对应的根因不一样:像素对齐问题会让边缘发毛,缩放和插值会让线条不锐利,文字渲染与抗锯齿设置会造成发灰。先把症状说清楚,排查会快很多。
最常见的坑是元素位置出现 0.5px 或 0.25px。屏幕会对半像素做插值,结果就是边缘变软。做 UI 时尤其要注意:矩形的 x/y、宽高、描边位置都要是整数像素;如果有描边,尽量使用内描边,避免描边居中导致两侧各占半像素。
设计稿里看着是 1px 的线,实际在导出前可能被整体缩放过一次。只要发生非整数倍缩放,1px 就会变成 1.2px 或 0.8px,然后由软件重新采样,锐度立刻下降。解决思路是:尽量在 100% 画板尺寸下绘制;需要多倍图时,用导出倍率而不是把画板放大再缩小。
例如你要给移动端 3x 使用,却从一个并非基于 1x 的画板随手导出 3x,容易出现尺寸不对齐。推荐做法:先明确基准密度,统一使用 1x 画板尺寸;然后按 2x/3x 由导出工具生成。这样能避免不同页面「同一组件却清晰度不同」的情况。
很多人导出后又把 PNG 丢到聊天软件、在线压缩网站、或某个 CMS 自动处理。只要发生重采样,原本清晰的边缘就会被重新插值。排查方法很简单:拿「软件直接导出文件」与「上传后下载回来的文件」对比,如果后者更糊,问题在二次处理链路。解决方案是关闭自动缩放、改用原尺寸上传,或切换为不重采样的上传通道。
文字发虚经常不是 PNG 的锅,而是字体渲染方式改变了:转曲后再缩放、或在非整数像素字号下渲染,都会让笔画发灰。建议:尽量让字号为整数;导出前不要对文字做非整数缩放;如果必须缩放,优先在最终尺寸下重新排版文字,而不是缩放整组图层。
抗锯齿是用来让斜线更平滑的,但对水平和垂直边缘来说,过度抗锯齿会让边看起来软。实践建议:图标和线性 UI 元素优先像素对齐,保持锐利;插画、斜线和曲线元素允许抗锯齿换取平滑。不要在同一套图标里一半像素对齐、一半不对齐,这会造成整体风格不一致。
阴影的扩散和模糊半径会天然降低边缘对比度,尤其是小尺寸组件。你以为是导出糊了,其实是阴影太重。小图标建议使用更克制的阴影:降低模糊半径、提高不透明度并缩小扩散,或者用更短的投影距离。透明叠加也会让文字与线条对比下降,必要时提高前景对比度。
在浏览器里用非 100% 缩放查看 PNG,会触发浏览器重采样,看起来就像糊。正确做法是:在 100% 缩放下查看;或在系统图片查看器里以 1:1 像素查看。很多「导出有问题」其实只是查看方式的问题。
同样的图,在不同软件里导出会因为插值策略不同而差一点点。Figma 更偏向界面资产,适合按倍图导出;Photoshop 更适合做精细的像素级调整。你的工作流可以这样分工:在 Figma 保证对齐和结构,在 Photoshop 做最终像素检查与微调,但尽量避免来回多次重采样。
第一步:把画板缩放到 100%,检查关键元素坐标与尺寸是否为整数。第二步:确认导出倍率是 1x/2x/3x 的整数倍,不要在导出前做任意缩放。第三步:检查线条描边位置,优先使用内描边或对齐到像素网格。第四步:对文字做最终尺寸排版,避免缩放文字。第五步:导出后用 1:1 查看方式确认,再检查是否被上传链路二次处理。按这个顺序走,大多数发虚问题都能在 10 分钟内定位。