游戏素材处理4 分钟阅读
图片预览正常但首次导出空白,怎样核对解码时序
在 drawImage 前等待 decode,记录图片版本与尺寸,用首次加载和快速切图检查过期绘制。


第一次导出是空白,等一会再点却正常。先记录图片地址、绘制开始时间和导出开始时间,再核对当时的 naturalWidth 与 naturalHeight。后续预览正常无法证明第一次 drawImage 执行时图片已经可用。
把绘制放到解码完成之后
按 官方资料,HTMLImageElement.decode() 返回 Promise,解码成功后才完成,失败会拒绝。在一个新的 Image 实例上设置本次 src,等待 decode 成功,再核对有效尺寸,执行 drawImage 和导出。捕获解码错误并显示失败状态,避免把空白文件当成成功结果。具体浏览器支持范围以目标环境为准。
快速切图需要版本校验
用 A、B 两张容易辨认的测试图,先选 A,再迅速选 B。为每次选择保留递增版本号,解码完成后仅让仍对应当前选择的结果绘制。更稳妥的测试副本为每次任务使用独立 Image,避免共用实例修改 src 干扰未完成请求。确认下载结果是 B,而不是较晚完成的 A。
再区分其他空白原因
分别测试首次加载、已缓存图片和无效文件,记录成功与失败的版本号。如果解码完成后才绘制仍为空白,继续按 相关排查指南 检查 canvas 尺寸赋值是否清空内容;跨域资源的导出权限也需要单独排查。可用 精灵切图工具 处理候选精灵素材,最终以下载文件的实际像素和内容验收,不能只看预览。
