是否由UIImage支持HEIC / HEIF

时间:2017-09-27 05:46:04

标签: ios uiimage ios11 heif

我的印象是UIImage会支持在iOS 11中引入的HEIC / HEIF文件。在我的测试中看起来并非如此。如果我确实让image = UIImage(命名:" test")指向test.heic,那么image就是nil。如果我使用图像文字,那么它会崩溃应用程序。想知道目前是否尚未实施。感谢。

3 个答案:

答案 0 :(得分:4)

虽然赵的回答有效,但速度相当慢。以下是快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文件夹中使用图片的方法,因此您必须将资源包含在资源之外或从网上提取。如果有人知道解决方法,请发布。

答案 1 :(得分:1)

您可以通过CIImage加载HEIF,然后转换为UIImage

CIImage *ciImage = [CIImage imageWithContentsOfURL:url];
imageView.image = [UIImage imageWithCIImage:ciImage];

答案 2 :(得分:1)

在Xcode 10.1(10B61)中,UIImage(named: "YourHeifImage")的工作原理与其他资产一样。


不过,有趣的是,当您想尝试一下...并将Airif HEIF图片从(例如iPhone)照片中拖放到Mac上时,它将得到扩展名.HEIC(全部大写)。然后将该图像添加到Xcode xcassets时,Xcode会抱怨扩展名不正确:

  

….xcassets:警告:内容不明确:图像集“ IMG_1791”引用了文件“ IMG_1791.HEIC”,但该文件没有有效的扩展名

如果您首先将扩展名更改为小写的.heic,然后将其添加到xcassets中,一切都很好。