ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

HEIC 转 JPG:为什么这个格式到处都打不开,以及浏览器能读却写不了

HEIC 转 JPG:为什么这个格式到处都打不开,以及浏览器能读却写不了 同事用 iPhone 拍了张现场照片发到群里我在 Windows 上双击打开系统提示需要安装「HEIF 图像扩展」。装完能看了但传到公司系统里又报格式不支持。这事儿隔一段时间就会遇到一次。iPhone 从 iOS 11 起默认就用这个格式拍照到现在快十年了兼容问题还是没彻底解决。一、先分清两件事容器和编码大部分关于 HEIC 的困惑都源于把两个概念混在了一起。HEIF 是容器格式High Efficiency Image File Format管的是文件怎么组织——一张图、多张图、缩略图、深度图、EXIF、编辑历史都可以塞进同一个文件。它本身不规定图像数据用什么方式压缩。HEVC 是编码格式High Efficiency Video Coding也叫 H.265管的是像素怎么压。我们平时说的 .heic 文件绝大多数是「HEIF 容器 HEVC 编码」这个组合。苹果给它起的名字叫 HEIC字母 C 就是 Coding 那个 C。这个区分不是抠字眼。它直接解释了后面所有的兼容性问题麻烦的不是容器是编码。HEIF 容器只是个文件结构谁都能实现HEVC 编码背后是一整套专利池这才是卡住所有人的地方。顺带一提HEIF 容器里也可以放 AV1 编码的数据那种叫 AVIF——同一个容器家族换了个不带专利包袱的编码器所以 AVIF 在浏览器里的支持速度比 HEIC 快得多。二、为什么各个平台支持得七零八落环境读 HEIC说明iOS 11 / macOS High Sierra原生支持苹果自己推的格式Windows 10/11需装扩展「HEIF 图像扩展」免费但依赖的「HEVC 视频扩展」要收费Android9.0 起支持各厂商实现程度不一Safari 17原生支持Chrome / Firefox不支持至今没有原生解码大多数网站上传不支持后端图像库要么没编译 HEVC要么不敢编Windows 那个坑最有代表性图像扩展是免费的但它要调用 HEVC 解码能力而「HEVC 视频扩展」在微软商店里标价几块钱。微软不是想赚这几块钱是它得为每一份 HEVC 解码器向专利池付授权费。 这就是问题的根源——HEVC 的专利授权是按份收费的而且授权方不止一家。MPEG LA、Access Advance、Velos Media 各管一摊还有一批专利持有者谁都没加入单独找你谈。一个浏览器厂商要原生支持 HEIC得先把这些账算清楚。 对比一下 AV1那是一帮公司组了个开放媒体联盟专门搞出来的免专利费编码所以 Chrome、Firefox 加 AVIF 支持的时候没什么心理负担。三、转换的几条路第一条用系统自带的。 Mac 上预览打开导出选 JPEG最省事。iPhone 上可以在「设置 → 相机 → 格式」里改成「兼容性最好」以后直接拍 JPG——代价是文件大一倍左右。已经拍好的照片通过「隔空投送」到 Mac 或者用微信发送时系统有时会自动转 JPG但这个行为不稳定别指望。 Windows 装了 HEIF 扩展之后画图打开另存为 JPG 也行就是批量处理很难受。第二条在线转换工具。 搜出来一大堆大部分的工作方式是你把照片传到它服务器它转完给你下载。 这条路我个人不太用。手机相册里的照片是最私人的东西之一传到一个不知道谁在运营的服务器上删没删、留没留、有没有被拿去训练模型都没法验证。转个格式而已不值得。第三条在浏览器本地转。 这是这几年才成立的方案。libheif 有 WebAssembly 版本把解码器下载到浏览器里跑图片本身一步都不用往外走。 判断一个在线工具是不是真的本地处理有个很直接的办法按 F12 打开 Network 面板转一张图看有没有把图片 POST 出去。真本地处理的话你只会看到 WASM 文件下载下来看不到图片传上去——这两件事方向是相反的。四、转成 JPG 会丢掉什么这一节很多转换教程都不提但踩过一次就知道有多要命。 HEIC 不只是「一张压得比较小的图」它是个容器里面可能装着好几样东西。转成 JPG 的时候JPG 装不下的部分会被直接丢掉而且没有任何提示。 Live Photo 的动态部分。 iPhone 的实况照片实际是「一张 HEIC 一段 MOV 视频」两个文件靠元数据关联。转 JPG 只处理静态那一张视频部分不会跟过去。想留住动态效果得先在 iPhone 上把实况照片单独存成视频。人像照片里存着一张景深图苹果相册的「调整景深」「换光效」全靠它。转 JPG 之后这张深度图没了虚化效果被永久烤进像素里再也调不回来。 HDR 增益图。 较新的 iPhone 拍的照片带一张增益图在支持 HDR 的屏幕上能显示出更高的动态范围。转成普通 JPG 后只剩基础图层在 HDR 屏上看会觉得「发灰、没那么亮了」。 多帧数据。 连拍、HDR 合成这类照片容器里可能存着多张图转换工具通常只取主图。 EXIF 大多能保留但看工具实现。要特别留意方向信息orientation——如果工具解码时没按 EXIF 把图转正、又没把 orientation 字段带过去你会得到一张躺倒的照片。我自己那边的处理是解码后按 EXIF 的 orientation 先把像素转正再编码所以方向不会出问题但深度图、增益图和 Live Photo 的视频部分保不住。这不是某个工具偷懒凡是走「解码成像素 → 重新编码」这条路的都保不住——目标格式里压根没有存放它们的地方。 所以一条实操建议重要的照片转换之后别急着删原图。转出来的 JPG 用于分发HEIC 原件自己留着。五、技术上最有意思的一点能读写不了我自己在做浏览器端的图像处理HEIC 这块折腾了不少时间结论是读能做到纯本地写做不到。读的路径是通的。libheif 编译成 WASM 大概几百 KB按需加载解出来的像素直接进 canvas之后想转 JPG 转 WebP 都随意。整个过程原图不上传。写就是另一回事了两个坎 第一个坎是专利。 前面说了HEVC 编码授权是按份计费的。一个免费网页工具用户量上去之后这笔账根本算不过来——而且授权方不止一家你还不知道到底该跟谁签。 第二个坎是体积。 能用的 HEVC 编码器比如 x265编译成 WASM 之后体积很大为了一个使用频率不高的输出格式让所有用户先下载几兆的编码器这个成本收益完全不成正比。所以我这边的处理是HEIC 读走端侧HEIC 写走服务端界面上直接标出来是哪一种不藏着。这个取舍不好看但比假装能做要诚实。 顺便说一句绝大多数场景其实不需要写 HEIC。你要 HEIC 干什么呢它的价值在于 iPhone 拍照时省空间而 iPhone 自己就会生成。反向把 JPG 转成 HEIC除了满足特定的归档要求日常几乎用不上。六、几条实操建议照片要发给别人、要上传系统直接在 iPhone 设置里把格式改成「兼容性最好」一劳永逸省下所有后续折腾。存储空间紧张的话再改回来。 已经拍了一堆 HEIC批量转的话Mac 用「预览」全选导出最快Windows 建议找个支持批量的工具别一张张画图另存。 涉及隐私的照片证件、票据、合同拍照优先选在浏览器里本地处理的工具转完自己按 F12 验一下有没有上传。这个验证成本很低值得做一次。做开发的如果要在服务端处理 HEIC注意 ImageMagick 和 Pillow 默认都不带 HEVC 支持得自己编译或者装 pyheif、libheif 相关的绑定而且要留意你所在地区的专利合规问题——这块比技术实现本身麻烦。我做的那个浏览器端图像工具叫做图映https://imging.cn所有功能几乎都是源于身边同事和朋友反馈的痛点HEIC 读取用的就是上面说的 libheif WASM 方案按需加载转 JPG / WebP / PNG 全程在本地完成图片不上传HEIC 写入受专利和体积限制走服务端界面会提前标明。地址https://imging.cn如果你也在做类似的事容器和编码这两个概念一定要先分清楚能省掉很多绕路。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表