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