我正在尝试使用 ImageIO 以 HEIC 文件格式保存图像。代码如下所示:

NSMutableData *imageData = [NSMutableData data];

CGImageDestinationRef destination = CGImageDestinationCreateWithData(
    (__bridge CFMutableDataRef)imageData,
    (__bridge CFStringRef)AVFileTypeHEIC, 1, NULL);
if (!destination) {
  NSLog(@"Image destination is nil");
  return;
}

// image is a CGImageRef to compress.
CGImageDestinationAddImage(destination, image, NULL);
BOOL success = CGImageDestinationFinalize(destination);
if (!success) {
  NSLog(@"Failed writing the image");
  return;
}

这适用于具有 A10 的设备,但由于无法初始化 destination 和错误消息 findWriterForType:140: unsupported file format 'public.heic' 在旧设备和模拟器上失败(也根据 Apple 的说法)。我找不到任何直接的方法来测试硬件是否支持 HEIC,而无需初始化新的图像目标并测试可空性。

有基于 AVFoundation 的 API 用于检查是否可以使用 HEIC 保存照片,例如使用 -[AVCapturePhotoOutput supportedPhotoCodecTypesForFileType:] ,但我不想为此初始化和配置捕获 session 。

有没有更直接的方法来查看硬件是否支持这种编码类型?

最佳答案

ImageIO 有一个名为 CGImageDestinationCopyTypeIdentifiers 的函数,它返回 CFArrayRef 支持类型的 CGImageDestinationRef 。因此,可以使用以下代码来确定设备是否支持HEIC编码:

#import <AVFoundation/AVFoundation.h>
#import <ImageIO/ImageIO.h>

BOOL SupportsHEIC() {
  NSArray<NSString *> *types = CFBridgingRelease(
      CGImageDestinationCopyTypeIdentifiers());
  return [types containsObject:AVFileTypeHEIC];
}

关于ios - 验证我的设备是否能够以HEIC格式编码图像的正式方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45905880/

10-12 04:21