为什么 iPhone 的照片打不开
从 iOS 11 起,iPhone 默认把照片存成 .heic 而不是 .jpg,
所以把 iPhone 照片 HEIC 转 JPG 是整个站点上需求最大的一次转换。这个格式本身确实好:
在同样的观感画质下,体积大约只有 JPEG 的一半,苹果换过去是有道理的。
麻烦在于里面装的东西。HEIC 用一个 HEVC 帧内帧来存像素,说白了就是一帧视频。 而 HEVC 带着专利授权,Chrome 和火狐从来没有为它内置解码器,Windows 上还要你去买扩展。 结果就是:这张照片在拍它的手机上一切正常,但会被投稿表单、打印店、老一点的笔记本、 或者一位用 Windows 的同事拒绝。
所谓 HEIC 转 JPG,做的事就是把那一帧解出来,重新编码成一个地球上什么东西都能读的格式。
什么变了,什么没变
画面保留下来了。方向也保留下来了 —— 这一点比听上去重要:手机是用标签记录旋转的, 并不真的转动像素,而忽略这个标签正是照片转出来躺着的原因。
文件会变大,一般是一倍左右。HEIC 的效率大约是 JPEG 的两倍,所以同一张图变成 JPG 就是要更多字节。这不是出错了,你换来的是"能打开"这件事。
有些东西会被丢掉,值得知道是哪些。HEIC 容器里可以不止一张图:实况照片的那段短片、 人像模式的深度图、HDR 增益图,或者连拍的其他兄弟帧。JPG 里没有地方放这些。 这个工具取的是主图,也就是"照片"应用给你看的那一张,其余留在原地。
原件请留着
因为 HEIC 本身已经是有损的,做成 JPG 就是第二轮有损压缩。默认画质下, 正常观看尺寸看不出来;画质调得很低就看得出来了。不管哪种,这一步都不可逆, 所以合理的习惯是:JPG 当成拿去给别人的副本,HEIC 当成自己留着的那一份。
计算发生在哪里
在你自己的机器上。解码器是编译成 WebAssembly 的 libheif,第一个文件时下载一次, 之后从浏览器缓存里取;而且它跑在后台线程里,所以一整个文件夹的全分辨率照片 不会把页面卡住。没有任何照片会被送到别处去。