libheif + Xcode

CI Status Version License Platform SwiftPM compatible Carthage compatible

libheif 的封装 + Xcode 项目。 使得 Carthage 支持将 libheif 构建为 Apple 平台的框架。

此仓库也包含使用 libheif 的 CocoaPods 规范文件。

需求

安装

Carthage

libheif 可通过 Carthage(通过此仓库)获得。

github "SDWebImage/libheif-Xcode"

CocoaPods

libheif 可通过 CocoaPods 获得。

pod 'libheif'

Swift Package Manager (Xcode 11+)

libheif 可通过 Swift Package Manager 获得。

let package = Package(
    dependencies: [
        .package(url: "https://github.com/SDWebImage/libheif-Xcode.git", from: "1.6.1")
    ]
)

HEIF 编码

libheif 本身不是一个完整功能的解码器,而是一个抽象层。 它需要 libde265 来支持 HEIF 解码,以及 x265 来支持 HEIF 编码。

注意:由于大多数人使用此库是为了 HEIF 解码,并且 x265 使用 GPLv2 许可,我们仅将 libheif 与 libde265-Xcode 集成在 Carthage/SwiftPM 包管理器上。 如果您需要 x265 支持 HEIF 编码,请仔细阅读以下内容。

CocoaPods 上的 x265

对于 CocoaPods 用户,您可以使用 libx265 子规范来集成 x265 编解码器支持 HEIF 编码。

pod 'libheif', :subspecs => ['libde265', 'libx265']

Carthage 上的 x265

对于 Carthage 用户,导出环境变量(如果需要,可以使用 bash profile 或 xcconfig)HAVE_X265=1,并修改 carthage 的 xcconfig 中的 GCC_PREPROCESSOR_DEFINITIONS 进行构建。

您可以使用 shell 脚本来启动 carthage,例如通过 carthage_build_with_x265.sh build 运行。

#!/bin/bash -e
xcconfig=$(mktemp /tmp/static.xcconfig.XXXXXX)
echo "GCC_PREPROCESSOR_DEFINITIONS = $(inherited) HAVE_X265=1" >> $xcconfig

export XCODE_XCCONFIG_FILE="$xcconfig"

carthage "$@"

SwiftPM 上的 x265

对于 SPM 用户,导出环境变量(如果需要,可以使用 bash profile 或 xcconfig)HAVE_X265=1,并使用 xcodebuildswift build 进行构建。

mv libheif.xcodeproj libheif.xcodeproj.bak
HAVE_X265=1 xcodebuild build -scheme libheif -sdk macosx -destination "generic/platform=macOS"

AVIF 解码

从 v1.7.0 开始,libheif 增加了对 AV1 图像文件格式 (AVIF) 的支持。 为了保持组件的功能性,我们仅通过 libaom 子规范在 CocoaPods 中集成 AVIF 支持。

pod 'libheif', :subspecs => ['libaom']

从 v1.9.0 开始,libheif 增加了使用 dav1d 作为 AVIF 解码器编解码器的支持。

要使用 dav1d 作为解码器编解码器,请使用如下所示的子规范:

pod 'libheif', :subspecs => ['libdav1d']

AVIF 编码

从 v1.7.0 开始,libheif 增加了使用 libaom 作为默认 AVIF 编码器编解码器的支持。 但是,libaom 在大多数移动系统上的表现不是很好。

pod 'libheif', :subspecs => ['libaom']

还有另一个 AVIF 编码器编解码器,rav1e。 它从 v1.8.0 版本开始添加。 对于 CocoaPods,您可以选择通过 librav1e 子规范使用。

pod 'libheif', :subspecs => ['librav1e']

注意

  1. rav1e 仅支持 iOS 和 macOS,因为 Rust 语言不支持 tvOS 或 watchOS 的 bitcode 格式。
  2. rav1e 仅支持 AVIF 编码,对于 AVIF 解码,您可以选择使用 aom 或 dav1d。
pod 'libheif', :subspecs => ['libdav1d', 'librav1e']
# or if you prefer aom
pod 'libheif', :subspecs => ['libaom', 'librav1e']

libheif 从 v1.14.0 开始,增加了对使用 svt-av1 作为 AVIF 解码器和编码器编解码器的支持。

要使用 svt-av1 作为编码器和解码器编解码器,请使用如下所示的子规范:

pod 'libheif', :subspecs => ['svt-av1']

许可证

libheif 在 GNU Lesser General Public License 的条款下可用。 有关更多信息,请参见 LICENSE 文件