HEIF & HEVC图像格式你知道多少?哪个有优势?( 二 )


通过在 设置 -> 照片 选项中可以设置传到 MAC 或者 PC 上时保持 HEIF 格式 。

HEIF & HEVC图像格式你知道多少?哪个有优势?

文章插图
screenshot
支持的设备
HEIF 图片:
编码:
硬件:**A10 **及以上芯片 iOS 设备 。即只有 iPhone7 及以上是支持 HEIF 的(有双摄像头 。才带有深度信息) 。
软件:iOS11 。运行 macOS 系统的 Mac 设备 。
解码:
硬件:A9 及以上芯片 iOS 设备(iPhone6s) 。配备 6 代及以上 Inter Core 处理(Skylake) 。
软件:iOS11 和 macOS 支持软解码 。但是 iOS11 锁版本代表最低只支持到 5s
HECV 视频:
视频分为 **8 位 / 10 位 两种模式 。基本和图片编解码保持一致 。唯一有区别的是 10 **位硬解码要求是 7 代 Intel 处理器 。
总结一下 。就是升到 iOS 11 之后 。你的设备就能解析新格式的图片和视频 。软硬解码的区别就是 。硬解码会更快并更省电 。
对开发者
上层框架 PhotoKit
对用户的几乎无感知切换的前提 。肯定是上层 API 没有变化 。调整的是最底层的 API 。所以一般开发者使用上层的框架时 。如 PhotoKIt 是不受影响的 。不同格式的图片都抽象为了同一个对象 。而且对图片增加滤镜和视频的调整修改 。最后都会渲染为 JPEG 和 H.264 。在这一级别的 API 是接触不到图片文件格式转换所带来的变化的 。
下层框架 Image I/O
Image I/O 中可以直接读写 .heic 文件 。iOS 11 中 Image I/O 能够直接读取 heif 的文件 。包括读取 exif 。xmp 等信息 。
let inputURL = URL(fileURLWithPath:Bundle.main.resourcePath! + \"/IMG_0513.HEIC\") let source = CGImageSourceCreateWithURL(inputURL as CFURL, nil) let image = CGImageSourceCreateImageAtIndex(source!, 0, nil)
let options = [kCGImageSourceCreateThumbnailFromImageIfAbsent as String: true, kCGImageSourceThumbnailMaxPixelSize as String: 320] as [String: Any] let thumb = CGImageSourceCreateThumbnailAtIndex(source!, 0, options as CFDictionary)
guard let cImage = image else { print(\"not support heic\") return; }
当然也可以选择把 CGImage 写入到 HEIC 格式 。虽然这样可以节约更多的存储空间 。实际使用的时候还是要注意转换操作 。
let url = URL(fileURLWithPath: \"/tmp/output.heic\") guard let destination = CGImageDestinationCreateWithURL(url as CFURL,AVFileType.heic as CFString, 1, nil) else{ fatalError(\"unable to create CGImageDestination\") } CGImageDestinationAddImage(imageDestination, image, nil) CGImageDestinationFinalize(imageDestination)
Apple 提供的很多 API。供开发者检测设备是否支持新的格式 。提供了两种推荐的工作场景事例 。
社交网络
在社交软件中 。涉及到图片分享之类的内容 。是无法确定接受者是否能支持新的格式的 。Apple 的策略是建议都进行转换到 JPEG 的操作 。比如发送邮件 。或者通过 extension 分享的时候 。传入其他 app 中的时候 。都已经进行了转换了 。
p2p 场景
在该场景中 。设备和设备间的直接连接 。首先把接受者的支持格式告知发送者 。然后发送者根据兼容的情况 。选择 HEIF 或者 JPEG 。比如 AirDrop。
同时诸如 SDWebImage 目前也正在做对 heif 的兼容 。
跨平台
大部分的播放器已经支持了 HEVC 即 H.265 的编码器 。但是针对 HEIF 的图片兼容性还是相对较差的 。目前有的是 Nokia 提供了一个 C++ 的读写库 。通过该库 。支持把 HEIF 的图片的解码到 HEVC 的编码数据 。
Android 兼容性:
依赖 Nokia 的库 。目前只能通过 CPU 软解 。
据说 LG 正在研发支持硬解的手机 。(raddit)
网页兼容性:
Nokia 提供 JS 库 。
Windows 兼容性:
目前也没有能直接打开 HEIF 文件的应用 。
对比
常常拿来与 HEVC 来做对比的是 VP9 。两者的性能相近 。但是 VP9 是开源的 。而 HEVC 是需要专利费的( $2 每设备) 。目前暂时没有通过 VP9 进行编码的图片 。所以这里主要对比的是 webp 就是通过 VP8 进行编码的图片 。webp WebP目前支持桌面上的Chrome和Opera浏览器 。手机支持仅限于原生的Android浏览器、Android系统上的Chrome浏览器、Opera Mini浏览器 。
WebP 有损支持
Google Chrome (desktop) 17+ Google Chrome for Android version 25+ Opera 11.10+ Native web browser, Android 4.0+ (ICS) WebP 有损 / 无损 / 透明支持
Google Chrome (desktop) 23+ Google Chrome for Android version 25+ Opera 12.10+ Native web browser, Android 4.2+ (JB-MR1) Pale Moon 26+ WebP 动画支持
Google Chrome (desktop and Android) 32+ Opera 19+
下面是几个关键技术点的对比 。可见 HEIF 功能是最强大的 。

推荐阅读