UIImage支持HEIC/HEIF
问题描述:
我的印象是UIImage会支持iOS 11中引入的HEIC/HEIF文件。在我的测试中,似乎并不是这样。如果我让图像= UIImage(命名:“测试”)指向test.heic然后图像是零。如果我使用图像文字,那么它会崩溃应用程序。想知道现在还没有实施。谢谢。UIImage支持HEIC/HEIF
答
虽然赵本山的答案的作品,它是相当缓慢的。下面大约快10-20倍。由于某些原因,它仍然无法在模拟器中工作,但请牢记这一点。
func convert(url: URL) -> UIImage? {
guard let source = CGImageSourceCreateWithURL(url as CFURL, nil) else { return nil }
guard let cgImage = CGImageSourceCreateImageAtIndex(source, 0, nil) else { return nil }
return UIImage(cgImage: cgImage)
}
这是一种从WWDC会议的幻灯片列出141页,但没有超清晰到我面前:https://devstreaming-cdn.apple.com/videos/wwdc/2017/511tj33587vdhds/511/511_working_with_heif_and_hevc.pdf
可惜我还是没能想出一个办法要在xcassets文件夹中使用图像,所以您必须将资源包含在资产之外或从网络中拉出。如果有人知道这个方法,请发布。
答
您可以通过CIImage加载HEIF,然后转换成UIImage的
CIImage *ciImage = [CIImage imageWithContentsOfURL:url];
imageView.image = [UIImage imageWithCIImage:ciImage];
谢谢@赵阳。只是给所有人提供的FYI,在Mac OS Sierra或High Sierra的模拟器上不起作用。我在我的6s上做了一些测试,因为我想看看相同像素大小的图像之间的加载时间有多长。下面是我的结果: JPEG了:0.039974667秒 海夫了:0.464739167秒 海夫了:0.279650166秒 JPEG了:0.021772125秒 JPEG了:0.056782417秒 海夫了:0.194127875秒 –