HEIC 上传失败、提示「格式不支持」怎么办
照片在手机里看得好好的,一上传就报错。这件事的原因其实就那么几种,按顺序排一遍,通常两分钟就能定位。
先分清是哪一类问题
报错文案五花八门,但底层只有四种情况,处理方式完全不同:
① 提示「不支持的文件格式」或「请上传 JPG/PNG」→ 网站本身不收 HEIC。
② 提示「文件过大」、进度条卡在 99%、或者传到一半断掉 → 超出大小或张数限制。
③ 提示「文件已损坏」或「无法读取」→ 大概率是后缀被改过。
④ 没有任何报错,但预览是空白,或者按钮点了没反应 → 浏览器或缓存问题。
对号入座往下看就行。
原因一:网站本身不收 HEIC
这是最常见的情况,而且跟你没关系 —— 是对方网站的问题。
HEIC 用的是 HEVC 编码,解码器涉及专利授权,很多网站为了省事干脆只接受 JPG 和 PNG。老旧的报名系统、政府办事网站、部分电商后台、还有一些论坛,都属于这一类。
解法:先把 HEIC 转成 JPG 再上传。转完之后文件就是标准 JPG,任何网站都认。这一步用 在线转换工具 几十秒就能完成,批量拖进去也行。
顺便说一句:iPhone 用户可以改设置让相机直接拍 JPG(设置 → 相机 → 格式 → 兼容性最好),代价是同样画质下文件体积大约翻倍。如果经常要上传到各种网站,这个设置能省掉很多麻烦。
原因二:文件太大或张数超限
很多网站有单文件上限,常见的是 2MB、5MB 或 10MB。一张 iPhone 原图 HEIC 通常在 2–4MB,转成 JPG 之后可能变成 4–8MB —— 本来能传的 HEIC,转完反而超限了,这个反直觉的情况很常见。
另外还有张数限制。有些站写着「支持批量」,实际一次只给 5 张或 10 张。
解法一:降低质量。转 JPG 时把质量设到 80–85,体积能压到原来的一半左右,肉眼几乎看不出差别。
解法二:缩小尺寸。如果只是要传给别人看,没必要保留 4000 像素的长边。把最长边限制在 1920 或 1280,体积会小一个数量级。
解法三:分批传。先确认对方的上限是多少,再决定分几批。
原因三:后缀被改过(最常见也最隐蔽)
网上流传一个「偏方」:把 .heic 直接重命名成 .jpg 就能用了。
这个做法是错的。改后缀只改了文件名,文件内容一个字节都没变。系统或网站如果按后缀判断类型,会以为这是 JPG,然后拿 JPG 解码器去解一段 HEVC 数据 —— 结果就是「文件已损坏」或者一片空白。
更麻烦的是,改过后缀的文件在某些软件里能勉强打开(因为那些软件会做内容嗅探),在另一些软件里就彻底打不开,于是你会觉得「同一张图有的地方能看有的地方不能看」,很难排查。
怎么确认是不是这个问题:看文件头。真正的 JPG 开头是 FF D8 FF 三个字节,HEIC 开头通常是 00 00 00 .. 66 74 79 70(里面带 ftyp 字样)。用任何十六进制查看器都能看到。
解法:重新真转一次。用会做字节级校验的转换工具,把 HEIC 真正解码后重新编码成 JPG,而不是改个名字。
原因四:浏览器或缓存问题
如果前面三种都排除了,问题可能在浏览器这边:
① 移动端 webview 缓存特别顽固。微信、QQ、各种 App 内置的浏览器会缓存旧版本的页面脚本,导致功能异常。修法是彻底关掉页面重新打开(不是返回,是关闭标签页或从后台划掉 App)。
② 插件拦截。广告拦截、隐私保护类扩展有时会拦掉必要的脚本。用无痕模式试一次就能判断 —— 无痕模式默认禁用扩展。
③ 浏览器太旧。本地转换依赖 WebAssembly 和 Canvas,IE 和很老的浏览器内核跑不了。
④ 内存不足。一次拖进太多大图,手机上可能直接卡死或者页面崩溃。分批处理。
排查清单
按这个顺序走,基本两分钟内能定位:
1. 看报错文案 —— 是「格式不支持」还是「文件损坏」还是「太大」。
2. 换一个浏览器或开无痕模式再试一次 —— 排除缓存和插件。
3. 检查文件后缀和真实格式是否一致 —— 怀疑被改过后缀就重新转一次。
4. 查对方网站的大小和张数限制 —— 超了就压质量或缩尺寸。
5. 如果是网站不收 HEIC —— 先转成 JPG 再上传,这是最省事的解法。