标签: WebP

  • HEIC 是什么,iPhone 的照片为什么在电脑上打不开

    把 iPhone 拍的照片传到电脑上,双击打不开;想上传到某个系统,提示”不支持的格式”。这不是文件坏了,只是苹果从 2017 年开始换了一种存储格式。

    HEIC 到底是什么

    HEIC 是 HEIF(High Efficiency Image Format)格式的一种扩展名。它是视频编码标准 HEVC/H.265 的静态图像版本——既然 H.265 能用一半体积存下同样质量的视频,那么用同样的压缩技术存照片,自然也能小很多。

    实际效果大概是:同等画质下,HEIC 比 JPEG 小 40%–50%。对一台存了几千张照片、存储又很贵的手机来说,这个收益足够大,所以苹果从 iOS 11 起把它设成了默认。

    HEIC 还有几个 JPEG 做不到的能力:支持透明通道、支持连拍序列(Live Photo 的动态部分)、支持 16 位色深。

    为什么到处都打不开

    两个原因叠加:

    • 专利授权:HEVC 涉及多个专利池,授权体系复杂,很多厂商(尤其开源社区)出于法律风险不愿意内置支持。
    • 惯性:JPEG 诞生于 1992 年,三十多年下来几乎所有软件、所有系统、所有网站都认它。要替换的是一个生态,不只是一个格式。

    目前的情况是:macOS 原生支持,iOS 原生支持,Windows 需要装扩展,Android 新版本支持,而大量网站和内部系统只收 JPG/PNG。

    浏览器里就能解码,不用上传

    过去转换 HEIC 要么装软件,要么传到在线转换网站。后者的风险和压缩工具一样——你的照片要先去别人的服务器上转一圈。

    现在有另一条路:把 HEVC 解码器编译成 WebAssembly,直接在浏览器里跑。页面加载一次解码器(几 MB),之后所有转换都在本地内存完成,文件不出设备。

    技术上大致是这样:

    读取 File 对象 → 交给 WASM 解码器 → 得到原始像素 → 用 Canvas 重新编码为 JPG/PNG → 生成下载链接

    代价是首次加载要下载解码器,之后就很快了。相比”把照片传给陌生服务器”,这个代价完全可以接受。

    转换的代价:这是有损的

    需要先说清楚一件事:HEIC 转 JPG 必然损失质量,因为两者是不同的编码方式,不存在”无损转换”。

    实际影响有多大,取决于原图:

    • 普通照片、风景、人像:转完几乎看不出差别。
    • 高动态范围、暗部细节丰富的图:可能出现色带。
    • 如果要转成 JPG 再打印或放大,建议用高质量参数(85 以上)。

    所以正确的顺序是:先转,再压缩,而不是压完再转。每一步有损操作都该只做一次。

    什么情况下不要转

    • 只是要在 Mac 或 iPhone 之间传看——完全没必要,原生就能打开。
    • 要长期归档——保留 HEIC 原片,需要用时再转。转出来的 JPG 是”一次性成品”。
    • 对方系统明确支持 HEIC——多问一句能省一次转换。

    如果你现在就需要转,工具箱里的 格式转换可以处理 HEIC 输入,同样全程在浏览器本地完成。

  • 图片压缩怎么选:质量、体积与格式的取舍

    每次要传图都会遇到同一个问题:这张图太大了,得压一压。但压完之后要么还是很大,要么糊得没法看。问题通常出在把”压缩”当成一个单一旋钮,实际上它是三个各自独立的维度。

    三个维度,各管一段

    • 质量参数:决定编码器丢弃多少细节。影响的是”画面干不干净”,对体积的影响是渐进的。
    • 尺寸:像素数量。影响的是”能看多大”,对体积的影响是平方级的——长宽各减半,像素数变成四分之一。
    • 格式:编码方式。同样的画面,不同格式的体积可以差好几倍。

    一个常见误判是:图太大就使劲降质量。但如果这张图是 4000×3000 要放在宽 800 的网页里,先降尺寸带来的收益远大于降质量,而且画面反而更锐利(缩小本身会平滑掉噪点)。

    质量参数的甜点区

    对 JPEG 而言,经验值:

    • 85–90:几乎看不出差别,适合摄影作品、需要放大的图。
    • 75–85:肉眼很难分辨,是网页配图最常用的区间。
    • 60–70:开始能在平坦区域(天空、墙面)看到色块,适合缩略图。
    • 低于 60:明显劣化,除非极端场景否则不值得。

    值得注意的是,已经压缩过的图再压一次,收益很小而劣化很快。JPEG 是有损编码,每一次重新编码都会在前一次的损伤上再削一刀。如果这个图来自微信或微博,它已经被压过了,此时再压不如直接降尺寸。

    什么时候该换格式

    格式的选择其实是在问”我要兼容谁”:

    • JPEG:通用性最好,照片类的默认选择。不支持透明。
    • PNG:无损,适合截图、文字、线条图、需要透明的图。不适合照片——一张照片存成 PNG 可能是 JPEG 的五到十倍大。
    • WebP:同等画质下比 JPEG 小 25–35%,支持透明和动图。现代浏览器都支持,是目前网页的稳妥选择。
    • AVIF:比 WebP 再小一截,画质更好,但编码很慢,且部分旧环境不支持。

    一个实用的判断:如果你要发到微信、公众号、或者别人可能用老软件打开,就老实用 JPEG。如果是自己网站上用,WebP 是当下性价比最高的。

    “压到 200KB 以内”是怎么做到的

    很多场景给的是目标体积而不是质量参数——比如报名系统要求附件不超过 500KB。这时候手动试参数很痛苦。

    自动化的做法是二分查找:先按中等质量压一次,看结果比目标大还是小,然后据此收窄区间,重复几轮就能逼近目标。七八次迭代内基本能收敛,而每次编码在本地浏览器里通常只要几十毫秒。

    这个思路比”固定压到 70 质量”聪明的地方在于:一张纯色海报和一张满是细节的照片,达到同样体积所需的质量参数是完全不同的。

    哪些图不该压

    • 已经是 WebP/AVIF 且体积合理的图,再压收益极低。
    • 含文字的截图——压缩会让文字边缘出现振铃伪影,糊掉的代价远高于省下的几十 KB。这种情况应该存 PNG。
    • 需要二次编辑的原图。压缩是不可逆的,先压了再改就改不回来了。

    关于”上传到服务器压缩”

    市面上大多数在线压缩工具要求你把图片传到它们的服务器。对个人隐私照片、证件、合同这类内容,这本身就是个不该承担的风险。

    我的在线工具箱里的压缩功能全部在浏览器本地完成,文件不会离开你的设备——这也是它当初坚持纯前端实现的主要原因。想试试的话在 图片压缩,整个过程断网也能跑。