You need to enable JavaScript to run this app.
导航
集成 HEIF 解码库
最近更新时间:2024.09.26 19:37:39首次发布时间:2021.11.18 19:41:55

本文为您介绍 veImageX 自研 iOS 端 HEIF 解码库的接入流程。

环境要求

类别说明
开发环境Xcode 11 及以上版本(推荐使用最新版本)
系统版本iOS 10.0 及以上版本

前提条件

您已完成独立 HEIF 编解码库的集成准备

注意事项

不支持对使用 Grid 编码生成的带有 aplha 通道的 heif 图进行解码处理。

获取 SDK 最新版本号

参考发布历史获取 SDK 最新版本号。

集成方式

使用 CocoaPods 集成编解码库,支持两种集成方式:静态库(TTSDK)和动态库(TTSDKFramework)。您需要在工程的 Podfile 文件中添加相关依赖,并执行 pod install 下载 SDK。

(推荐)方式一:动态库接入

source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/bytedance/cocoapods_sdk_source_repo.git'
source 'https://github.com/volcengine/volcengine-specs.git'

pod 'TTSDKFramework', 'x.x.x.x', :subspecs => [ 	
	# x.x.x.x 代表版本号,推荐使用最新版本
  'ImageHeifDecoder'
]

方式二:静态库接入

source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/bytedance/cocoapods_sdk_source_repo.git'
source 'https://github.com/volcengine/volcengine-specs.git'

pod 'TTSDK', 'x.x.x.x', :subspecs => [ 
	# x.x.x.x 代表版本号,推荐使用最新版本
  'ImageHeifDecoder',   
]

说明

使用 TTSDK 静态库时,如果与其他 SDK 存在符号冲突,需要切换到动态库避免符号冲突。

配置授权

在引入头文件后,请完成初始化配置。代码示例如下所示:

// 引入头文件
// 动态库
#import <TTSDKFramework/TTSDKFramework.h>
// 静态库
#import "BDWebImageStartUpConfig.h"
#import "BDHeifCloudManagerConfig.h"

// 在 AppDelegate.m 中添加下面的初始化配置
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
		// 配置图片库 SDK 的使用参数并开始使用
    TTSDKImagexConfiguration *imagexConfig = [TTSDKImagexConfiguration defaultImagexConfig];
    imagexConfig.token = @"xxxxxxx"; // 传入获取的 Token 值
    imagexConfig.authCodes = @[@"xxxx", @"xxxx", @"xxxx"]; // 传入获取的授权码
    TTSDKConfiguration *config = [TTSDKConfiguration defaultConfigurationWithAppID:@"xxx"]; //传入获取的应用 ID
    config.imagexConfiguration = imagexConfig;
    config.bizType = TTSDKServiceBizType_Heif; 
    config.shouldInitAppLog = NO;
    [TTSDKManager startWithConfiguration:config];
}

解码示例

使用 HEIF 解码,代码示例如下所示:

NSData *imageData = [NSData data]; // 需要解码的图片data
BDImageDecoderHeic *heicDecoder = [[BDImageDecoderHeic alloc] initWithData:imageData];
CGImageRef imageRef = [heicDecoder copyImageAtIndex:0];
UIImage *image = [UIImage imageWithCGImage:imageRef scale:heicDecoder.config.scale ?: 1 orientation:heicDecoder.imageOrientation]; // 解码后的图片
CGImageRelease(imageRef);

接口介绍

  • BDImageDecoder 类

BDImageDecoder类为解码 HEIF 图片的接口类,代码示例如下所示:

@protocol BDImageDecoder <NSObject>

@required
@property (nonatomic, assign, readonly) BDImageCodeType codeType; // 图片格式
@property (nonatomic, strong, readonly, nullable) NSError *error; // 解码失败错误码
@property (nonatomic, strong, readonly, nullable) NSData *data; // 待解码图片data
@property (nonatomic, copy, readonly, nullable) NSString *filePath; // 待解码图片路径
@property (nonatomic, assign, readonly) UIImageOrientation imageOrientation; // 图片方向信息
@property (nonatomic, assign, readonly) NSUInteger imageCount; // 图片帧数
@property (nonatomic, assign, readonly) CGSize originSize; // 图片原始size

- (instancetype _Nullable)initWithData:(NSData * _Nullable)data; // 使用待解码图片data初始化
- (instancetype _Nullable)initWithContentOfFile:(NSString * _Nullable)file; // 使用待解码图片路径初始化

- (CGImageRef _Nullable)copyImageAtIndex:(NSUInteger)index; // 获取第index帧的图片

@optional
+ (BOOL)canDecode:(NSData * _Nonnull)data; // 是否能解码
+ (BOOL)isAnimatedImage:(NSData * _Nonnull)data; // 是否是动图

@end

说明

若 heif 软解解码失败,您可在服务端下发 url 时下发多个图片格式(建议为 heic/heif、webp/awebp、jpeg),若 heic 失败后则指定降级请求 webp、jpeg 格式。