本文为您介绍 veImageX 自研 iOS 端 HEIF 解码库的接入流程。
类别 | 说明 |
---|---|
开发环境 | Xcode 11 及以上版本(推荐使用最新版本) |
系统版本 | iOS 10.0 及以上版本 |
您已完成独立 HEIF 编解码库的集成准备。
不支持对使用 Grid 编码生成的带有 aplha 通道的 heif 图进行解码处理。
参考发布历史获取 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
类为解码 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 格式。