代码之家  ›  专栏  ›  技术社区  ›  Brian F Leighty

UIImage是否支持HEIC/HEIF

  •  8
  • Brian F Leighty  · 技术社区  · 8 年前

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

    3 回复  |  直到 8 年前
        1
  •  6
  •   Brian F Leighty    8 年前

    虽然赵的回答有效,但相当缓慢。以下速度约为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)
    }
    

    这在第141页有点像WWDC会议幻灯片中概述的,但之前我并不十分清楚: https://devstreaming-cdn.apple.com/videos/wwdc/2017/511tj33587vdhds/511/511_working_with_heif_and_hevc.pdf

    不幸的是,我仍然无法找到一种方法来使用xcassets文件夹中的图像,因此您要么必须包含资产之外的文件,要么从web上提取。如果有人知道解决这个问题的方法,请张贴。

        2
  •  6
  •   PDK    7 年前

    UIImage(named: "YourHeifImage")


    .HEIC

    没有有效的扩展名

    .heic ,然后将其添加到xcassets中,一切正常。

        3
  •  2
  •   zhao yang    8 年前

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

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