UIImage是否支持HEIC / HEIF

Bri*_*hty 6 uiimage ios ios11 heif

我的印象是UIImage将支持iOS 11中引入的HEIC / HEIF文件。在我的测试中,情况似乎并非如此。如果我确实让image = UIImage(named:“ test”)指向test.heic,那么image为nil。如果我使用图像文字,那么它将使应用程序崩溃。想知道现在是否尚未实现。谢谢。

PDK*_*PDK 7

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

\n\n
\n\n

有趣的是,当您想尝试 \xe2\x80\xa6 并将 HEIF 图片从您的(例如 iPhone)照片 AirDrop 到您的 Mac 时,它将获得扩展名.HEIC(全部大写)。然后,当您将该图像添加到 Xcode xcassets 时,Xcode 会抱怨扩展名不正确:

\n\n
\n

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

\n
\n\n

如果您首先将扩展名更改为小写.heic,然后将其添加到 xcassets,则一切正常。

\n


Bri*_*hty 5

虽然赵的答案有效,但速度相当慢。下面的速度快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)
}
Run Code Online (Sandbox Code Playgroud)

WWDC的幻灯片在第141页上对此进行了概述,但之前对我而言还不是很清楚:https : //devstreaming-cdn.apple.com/videos/wwdc/2017/511tj33587vdhds/511/511_working_with_heif_and_hevc.pdf

不幸的是,我仍然无法找到在xcassets文件夹中使用图像的方法,因此您要么必须将文件包含在资产之外,要么要从网络上提取文件。如果有人知道解决方法,请发布。