先说结论
打开 HEIC 转 JPG,把照片丢进去,按“转换”。质量滑块别动,“保留日期、相机和参数”也保持勾着,除非你有理由不留。出来的就是 JPEG,一张一个下载按钮,多了就给你一个 zip。
整个过程什么都不上传。在这件事上这算少见,而为什么少见,正是这一页里有意思的那一半。
HEIC 到底是什么
HEIC 其实不算 JPEG 那种意义上的图片格式。它是个容器,跟 MP4 是同一套盒式结构,里面装着一帧 HEVC 视频。HEVC 也叫 H.265,就是接替你那台老摄像机那套编码的东西,而且相当能打:同样画质下,一张 HEIC 的 iPhone 照片大约只有 JPEG 的一半大。
苹果从 2017 年的 iOS 11 起换用它,并设成默认。也就是说,除非有人专门去设置里选过“最兼容”,否则这将近十年里那部手机拍的每一张照片,都在用一个这样的格式:
- Windows 不装商店里的扩展就预览不了;
- 多数网页上传表单直接拒收;
- 大量老一点的桌面软件压根没听说过;
- 除了 Safari,没有哪个浏览器显示得出来。
照片本身没毛病,它比同一张的 JPEG 还更好。只是它用的这门语言,世界上大部分地方没学过。
为什么只有 Safari 打得开
这一段能解释你用过的每一个转换器,所以值得单说。
解 HEVC 得有 HEVC 解码器,而 HEVC 是有专利的。授权由不止一个专利池管,随产品带一个解码器,就意味着得给人掏钱。浏览器的应付办法是靠操作系统,在硬件本来就有授权解码器的机器上,Chrome 能放 HEVC 视频,但那条路是为视频播放接通的,不是为静态图片。所以把一个 HEIC 交给 <img>,Chrome、Firefox 和 Edge 一律拒收,什么操作系统上都一样。
苹果设备上的 Safari 是例外,因为 macOS 和 iOS 手里有解码器,而 Safari 被允许去问它要。除此之外的地方,这张图对浏览器来说就是解不开。
于是一个转换器只剩两条路可走,而在这两条路之间怎么选,就是这类工具的全部故事。
为什么几乎每个 HEIC 转换器都要你上传
第一条路:把解码器放在服务器上。照片传上去,在一台你从没见过的机器上解码,重编成 JPEG,再发回来。几乎每一个“免费在线 HEIC 转换器”都是这么干的,这也正是它们都要你文件的原因。这不是偷懒,浏览器确实没法赤手空拳干这活。
代价值得说得直白些。手机里的照片是多数人拥有的最私密的文件,而一张刚出 iPhone 的 HEIC,通常带着精确到几米的拍摄坐标,外加精确到秒的日期和一个相机标识。把一整个文件夹传给一个免费服务,等于把照片和这些一并交出去。之后会发生什么,取决于一份你没读过的隐私政策、一台你查不了的服务器,还有一个不是你挑的司法辖区。
第二条路:把解码器放在页面上。这一个就是这么做的。它自带一份编译成 WebAssembly 的 libheif,由本站发出,大约 1.4 MB,下一次就有缓存。你的浏览器在你自己的机器上、用你自己的硬件跑它,照片哪儿都不去。页面开一次之后,你完全可以拔掉网线,它照干不误,而这是任何上传型转换器都做不到的,也是最省事的一条证明。
那 1.4 MB 就是全部代价。你要是在按流量计费的网络上,这确实是笔实实在在的开销,也值得知道,所以页面把它明说出来,而不是悄悄下下来。
转换要拿画面换多少
HEIC 和 JPEG 是两种编码,中间不存在一条不用把画面解开再编回去的路,而后面这一编是有损的。实际上这件事远没有听上去那么要紧:
- 质量 92,也就是转换器的起点,在任何正常观看尺寸下,照片都非常难跟原图区分开。你要找的是平滑渐变里的差别,比如晴空,而通常你找不到。
- JPEG 会更大。一般大三分之一到一倍,因为 JPEG 是 1992 年的编码,而 HEVC 不是。这就是那笔交易:文件大一些,换什么都打得开。
- 该避的是转两遍。每一次有损编码都要花掉一点。从原始的 HEIC 转,别从别人已经给你转好的 JPEG 转,而且只转一次。
一点损失都不想要的话,格式菜单里还有 PNG。做好心理准备:一张照片存成 PNG,通常是 JPEG 的五到十倍大,因为 PNG 那套压缩是为大片纯色和线稿设计的,不是为草地和皮肤。
日期、相机和坐标
大家抱怨 HEIC 转换器,抱怨得最多的就是照片转回来丢了拍摄日期,于是一整趟假期的照片全按今天的日期沉到相册最底下。这是因为,经由画布转换出来的只有像素,别的什么都没有,画布不带任何标签。所以除非转换器专门去把元数据另取一遍,否则它就是没了。
这里的工具会把 EXIF 块从 HEIC 里抄出来,写进 JPEG,日期因此保住。页面上有个勾选框,默认勾着。取消勾选,出来的 JPEG 里就只剩画面。
决定之前,先看看那份列表:每张照片那一行都写明文件里有没有 GPS 坐标,而且是在你转任何东西之前就写明。照片要发去公开场合,那一行就是该读的。照片只是进你自己的相册,那留着元数据几乎肯定才是你要的。
不管你怎么选,有一个标签一定会被改,而为什么改值得知道。HEIC 把旋转记在两个地方:容器里一份,EXIF 块里一份。解码器在解码时已经把容器那份旋转应用上了,所以交出来的像素本来就是正的。这时候 EXIF 要是还说“把这张转 90 度”,看图软件就会再转一次,每一张竖构图都得躺下。所以方向标签被设成正立,其余的一律按手机原来写的样子抄过去。
你要是想逐条细看那些标签,或者把已经是 JPEG 的照片里的标签清掉,那是另一件活,另有一篇指南。
容易踩的几个坑
- 名叫“.jpg”的 HEIC。极其常见:中途有什么东西把它改了名,却没转格式,所以它照样打不开。丢进转换器的每个文件都按开头那几个字节判断,不看名字,所以这种文件照样能转。也正因如此,一个真的是 JPEG 的文件会被直接告知,而不是被转成一份自己的副本。
- 一个文件,好几张画面。连拍或者 Live Photo 可以装不止一张静态图。装几张就转几张,多出来的按原文件名加编号。Live Photo 的视频那一半,是手机搁在 HEIC 旁边的另一个文件,不在这里面,也就无从转起。
- AVIF. AVIF 使用浏览器解码器,不加载 HEIC 引擎。输出仍为 JPEG、PNG 或 WebP。只输出第一张解码后的图片,颜色或 HDR 可能改变。AVIF 元数据一律不保留,元数据复选框仅适用于 HEIC。原文件保持不变。
- 从源头上把问题掐掉。手机上:设置 → 相机 → 格式 → 最兼容。从此新拍的都是 JPEG。它更占存储空间,也不会动到你已有的照片,但从此不用再干这件事了。
- 分享有时候本来就转了。把照片隔空投送或者用邮件发给非苹果设备,往往过去的就是 JPEG,因为 iOS 在发出时顺手转了。一张照片要是仍旧以 HEIC 的样子到了你手上,那说明它走的是没转的那条路。
怎么判断一个转换器是不是在上传
这套办法对任何工具都管用,不只这一个,花不了十五秒。
- 打开页面,再打开浏览器的开发者工具,切到“网络”面板。
- 转一张照片,盯着看。在你机器上解码的工具,那一刻一条请求都不会发。上传的工具会发一条,大小跟你照片差不多,而那个大小你看得见。
- 或者更省事:把页面开一次,断开网络,再试着转点什么。把照片送出去解码的工具,这时候就不动了;自带解码器的那个不会。
这里的转换器就是照着这两条检查造的,这套道理更长的版本在把文件传给在线转换器安全吗里。