我曾认为UIImage支持iOS 11引入的HEIC/HEIF文件。但在我的测试中,好像并非如此。如果我使用let image = UIImage(named: "test")将其指向test.heic,那么图像为空。如果我使用一个图像文字,则会导致应用程序崩溃。想知道现在是否尚未实现此功能。谢谢。
UIImage(named: "YourHeifImage")
的使用与其他资源一样。有趣的是,如果你想试试这个功能,并且通过AirDrop将一个HEIF图片从你的(iPhone)照片传输到你的Mac电脑时,它将会被命名为大写字母.HEIC
的扩展名。当你添加该图片到Xcode的xcassets文件中时,Xcode会报错,提示扩展名不正确:....xcassets: warning: Ambiguous Content: The image set "IMG_1791" references a file "IMG_1791.HEIC", but that file does not have a valid extension.如果你先更改扩展名为小写字母
.heic
,然后再将其添加到xcassets中,就没有问题了。虽然赵的答案是能够实现的,但是它的速度较慢。以下方法的速度大约快了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)
}
CIImage *ciImage = [CIImage imageWithContentsOfURL:url];
imageView.image = [UIImage imageWithCIImage:ciImage];