kelvinct
017 · HEIC 转 PNG

你的 HEIC 照片没东西打得开?

iPhone 把照片存成 .HEIC,但网络上有一半的地方到现在还是打不开。把它们丢进来,换回原尺寸的 PNG,一次几张都行。解码器就跑在这个页面里——照片不会被上传,EXIF 与 GPS 标签也会留在原地。

为什么 .HEIC 到处都打不开?

从 iOS 11 开始,iPhone 拍出来的照片就是 HEIC:一格 HEVC 视频(也就是俗称的 H.265)的静态画面,装在 Apple 的容器里。它确实比 JPEG 好——同样画质大约只要一半的文件大小,还支持真正的透明度和 10 比特色彩——但 HEVC 被专利池绑着,解码器要付授权费,所以 Windows、比较旧的 Android,还有一大堆网页服务干脆就没有内置。文件本身没问题,是你拿来开它的东西读不懂。

这个页面自己带了一套解码器:编译成 WebAssembly 的 libheif,就在这个分页里跑。它读出照片、套用容器指定的旋转方向,再把像素交给 canvas 写成 PNG——一个从来没有人拒绝过的格式。多张影像的文件(连拍,或 Apple 在 Live Photo 旁边附的静态画面)会依序编号输出。

转档路上会弄丢什么

PNG 是无损的,所以没有任何一个像素被丢掉——只是文件会大很多,因为 HEIC 靠的就是压缩,而 PNG 不压。真正被拿掉的是中继数据:拍摄时间、相机设置,还有你当时站的那个位置的 GPS 座标。这通常正是重点。如果你需要保留那些标签,这个工具就不对了。

10 比特色彩的 HEIC 会被压成 canvas 能容纳的每信道 8 比特。一般照片你看不出来;大片渐层的夕阳就有可能。

没有任何东西离开这个页面

没有上传,也没有服务器。解码器是 1.9 MB 的 WebAssembly,在你第一次丢文件时才从本站抓下来;在那之后所有事情——解码、缩略图、PNG 编码,连 ZIP 打包——都发生在你自己的浏览器里。转档的时候打开开发者工具看 Network 分页:这个页面唯一发出的请求,是一个只记录网址 /heic/ 的浏览计数,其他什么都没有。你的照片不在里面。