java hevc和heif_iOS 影音新格式 HEIF HEVC
蘋果在 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/
二、對代碼的影響
識別HEIF
識別HEIF文件的方法和識別GIF一樣,對比文件UTI(uniformTypeIdentifier)
- (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;
}
檢測設備是否支持硬解碼 HEVC
VTIsHardwareDecodeSupported(kCMVideoCodecType_HEVC)
系統選圖對 HEIF 的支持
UIImagePickerController 添加了一個枚舉類型:
typedef enum UIImagePickerControllerImageURLExportPreset : NSInteger {
UIImagePickerControllerImageURLExportPresetCompatible = 0,
UIImagePickerControllerImageURLExportPresetCurrent
} UIImagePickerControllerImageURLExportPreset;
@property(nonatomic) UIImagePickerControllerImageURLExportPreset imageExportPreset NS_AVAILABLE_IOS(11_0); // default value is UIImagePickerControllerImageExportPresetCompatible.
其中,UIImagePickerControllerImageURLExportPresetCompatible會把 HEIF 格式轉成 JPEG。UIImagePickerControllerImageURLExportPresetCurrent會顯示原始的編碼格式。
三、編碼轉換
HEIF 格式轉 JPEG 格式
[[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 {
}
}];
JPEG 格式轉 HEIF 格式
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;
}
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的java hevc和heif_iOS 影音新格式 HEIF HEVC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java redis使用卡死_记一次找因
- 下一篇: java update多个字段的值_SQ