abox.tools

语言: 简体中文

手机存下的那张照片,和那个什么都打不开的格式

iPhone 把照片存成 HEIC,它比 JPEG 更小也更好,而大量软件至今拒绝打开它。这一页讲这个格式究竟是什么,转换要拿画质换多少,以及为什么几乎每一个转换器都要你先把照片传上去。

打开HEIC 转 JPG iPhone 拍的照片,换成什么都打得开的格式。

以 Markdown 查看

先说结论

打开 HEIC 转 JPG,把照片丢进去,按“转换”。质量滑块别动,“保留日期、相机和参数”也保持勾着,除非你有理由不留。出来的就是 JPEG,一张一个下载按钮,多了就给你一个 zip。

整个过程什么都不上传。在这件事上这算少见,而为什么少见,正是这一页里有意思的那一半。

选项卡片:格式菜单选在 JPEG,质量滑块在 85,还有一个开关决定是否保留原文件的日期、相机和位置。
整个转换就这三项。值得停一停的是元数据那个开关,下面一节说明了原因。

HEIC 到底是什么

HEIC 其实不算 JPEG 那种意义上的图片格式。它是个容器,跟 MP4 是同一套盒式结构,里面装着一帧 HEVC 视频。HEVC 也叫 H.265,就是接替你那台老摄像机那套编码的东西,而且相当能打:同样画质下,一张 HEIC 的 iPhone 照片大约只有 JPEG 的一半大。

苹果从 2017 年的 iOS 11 起换用它,并设成默认。也就是说,除非有人专门去设置里选过“最兼容”,否则这将近十年里那部手机拍的每一张照片,都在用一个这样的格式:

照片本身没毛病,它比同一张的 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 是两种编码,中间不存在一条不用把画面解开再编回去的路,而后面这一编是有损的。实际上这件事远没有听上去那么要紧:

一点损失都不想要的话,格式菜单里还有 PNG。做好心理准备:一张照片存成 PNG,通常是 JPEG 的五到十倍大,因为 PNG 那套压缩是为大片纯色和线稿设计的,不是为草地和皮肤。

日期、相机和坐标

大家抱怨 HEIC 转换器,抱怨得最多的就是照片转回来丢了拍摄日期,于是一整趟假期的照片全按今天的日期沉到相册最底下。这是因为,经由画布转换出来的只有像素,别的什么都没有,画布不带任何标签。所以除非转换器专门去把元数据另取一遍,否则它就是没了。

这里的工具会把 EXIF 块从 HEIC 里抄出来,写进 JPEG,日期因此保住。页面上有个勾选框,默认勾着。取消勾选,出来的 JPEG 里就只剩画面。

决定之前,先看看那份列表:每张照片那一行都写明文件里有没有 GPS 坐标,而且是在你转任何东西之前就写明。照片要发去公开场合,那一行就是该读的。照片只是进你自己的相册,那留着元数据几乎肯定才是你要的。

不管你怎么选,有一个标签一定会被改,而为什么改值得知道。HEIC 把旋转记在两个地方:容器里一份,EXIF 块里一份。解码器在解码时已经把容器那份旋转应用上了,所以交出来的像素本来就是正的。这时候 EXIF 要是还说“把这张转 90 度”,看图软件就会再转一次,每一张竖构图都得躺下。所以方向标签被设成正立,其余的一律按手机原来写的样子抄过去。

你要是想逐条细看那些标签,或者把已经是 JPEG 的照片里的标签清掉,那是另一件活,另有一篇指南。

容易踩的几个坑

怎么判断一个转换器是不是在上传

这套办法对任何工具都管用,不只这一个,花不了十五秒。

  1. 打开页面,再打开浏览器的开发者工具,切到“网络”面板。
  2. 转一张照片,盯着看。在你机器上解码的工具,那一刻一条请求都不会发。上传的工具会发一条,大小跟你照片差不多,而那个大小你看得见。
  3. 或者更省事:把页面开一次,断开网络,再试着转点什么。把照片送出去解码的工具,这时候就不动了;自带解码器的那个不会。

这里的转换器就是照着这两条检查造的,这套道理更长的版本在把文件传给在线转换器安全吗里。