IOS应用开发:iOS 影音新格式 HEIF HEVC
安安 2017-09-20 来源 :网络 阅读 946 评论 0

摘要:本篇IOS应用开发教程将为大家讲解iOS 影音新格式 HEIF HEVC,看完这篇文章会让你对IOS编程的知识点有更加清晰的理解和运用。

本篇IOS应用开发教程将为大家讲解iOS 影音新格式 HEIF HEVC,看完这篇文章会让你对IOS编程的知识点有更加清晰的理解和运用。

 

苹果在 iOS 11 的发布会上,推出了两种新的媒体格式 HEIF HEVC,都是为了保证画质的情况下,大大减少视频、照片的大小。

一、简介

HEVC全称 High Efficiency Video Coding(高效率视频编码),是比H.264更加优秀的一种视频压缩标准(也称为 H.265)。HEVC 在低码率视频压缩上,提升质量、减少容量和节省带宽方面都有突出表现,因此除了拍摄占用的容量减少外,在视频通话时也能更加流畅清晰。

HEIF: 高效率图像文件格式(英语:High Efficiency Image File Format, HEIF;也称高效图像文件格式)是一个用于单张图像或图像序列的文件格式。它由运动图像专家组(MPEG)开发,并在MPEG-H Part 12(ISO/IEC 23008-12)中定义。用于HEVC关键帧的处理上,因此它同样可以用更少的容量来存储画质更好的照片,在连拍、动图和色彩变化不大的照片上效果尤其明显。

HEIF规范也定义了高效率视频编码(HEVC)编码的内嵌图像和HEVC编码的图像序列的存储方式,其中以受约束的方式应用帧间预测。

HEIF文件与ISO基本媒体文件格式(ISOBMFF,ISO/IEC 14496-12)兼容,并且还可以包括其他媒体流,例如定时的文本和音频。

HEIF 文件可以包含 GIF 动图、HDR 相片、连拍、Live Photo。

HEIF扩展名:.heif、.heic。
互联网媒体类型:image/heif、image/heic、image/heif-sequence、image/

二、对代码的影响

1. 

识别HEIF

2. 

识别HEIF文件的方法和识别GIF一样,对比文件UTI(uniformTypeIdentifier)

3. 

- (BOOL)isHeif:(PHAsset *)asset

{

    __block BOOL isHEIF = NO;

    NSArray *resourceList = [PHAssetResource assetResourcesForAsset:asset];

    [resourceList enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

        PHAssetResource *resource = obj;

        NSString *UTI = resource.uniformTypeIdentifier;

        if ([UTI isEqualToString:AVFileTypeHEIF] || [UTI isEqualToString:AVFileTypeHEIC]) {

            isHEIF = YES;

            *stop = YES;

        }

    }];

    return isHEIF;

}

4. 

5. 

检测设备是否支持硬解码 HEVC

6. 

VTIsHardwareDecodeSupported(kCMVideoCodecType_HEVC)

7. 

8. 

系统选图对 HEIF 的支持

9. 

UIImagePickerController  添加了一个枚举类型:

10. 

typedef enum UIImagePickerControllerImageURLExportPreset : NSInteger {

    UIImagePickerControllerImageURLExportPresetCompatible = 0,

    UIImagePickerControllerImageURLExportPresetCurrent

} UIImagePickerControllerImageURLExportPreset;

@property(nonatomic)           UIImagePickerControllerImageURLExportPreset imageExportPreset NS_AVAILABLE_IOS(11_0);   // default value is UIImagePickerControllerImageExportPresetCompatible.

11. 

其中,UIImagePickerControllerImageURLExportPresetCompatible会把 HEIF 格式转成 JPEG。UIImagePickerControllerImageURLExportPresetCurrent 会显示原始的编码格式。

三、编码转换

1. 

HEIF 格式转 JPEG 格式

2. 

[[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {

        if ([dataUTI isEqualToString:AVFileTypeHEIF] || [dataUTI isEqualToString:AVFileTypeHEIC]) {

            CIImage *ciImage = [CIImage imageWithData:imageData];

            CIContext *context = [CIContext context];

            NSData *jpgData = [context JPEGRepresentationOfImage:ciImage colorSpace:ciImage.colorSpace options:@{}];

        } else {

        }

    }];

3. 

4. 

JPEG 格式转 HEIF 格式

5. 

NSData * UIImageHEICRepresentation(UIImage *const image, const CGFloat compressionQuality)

{

    NSData *imageData = nil;

    if (@available(iOS 11.0, *)) {

        if (image) {

            NSMutableData *destinationData = [NSMutableData new];

            CGImageDestinationRef destination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)destinationData, (__bridge CFStringRef)AVFileTypeHEIC, 1, NULL);

            if (destination) {

                NSDictionary *options = @{(__bridge NSString *)kCGImageDestinationLossyCompressionQuality: @(compressionQuality)};

                CGImageDestinationAddImage(destination, image.CGImage, (__bridge CFDictionaryRef)options);

                CGImageDestinationFinalize(destination);

                imageData = destinationData;

                CFRelease(destination);

            } else {// 创建失败,说明设备不支持 HEIF 写入

            }

        }

    }

    return imageData;

}

希望这篇文章可以帮助到你。总之,同学们,你想要的职坐标IOS频道都能找到!

本文由 @安安 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程