加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 资源文件夹中的HEIC图像未加载

发布时间:2020-12-14 05:28:37 所属栏目:百科 来源:网络整理
导读:我已经从我的项目中的xcassets文件夹中设置了.heic图像以节省一些空间.但是我无法通过UI Image(命名为:)构造函数加载它们.我总是为零,所以我必须加载它们的唯一方法是指定URL.你知道为什么吗? imageView.image = UIImage(named: "stone") // This returns n
我已经从我的项目中的xcassets文件夹中设置了.heic图像以节省一些空间.但是我无法通过UI Image(命名为:)构造函数加载它们.我总是为零,所以我必须加载它们的唯一方法是指定URL.你知道为什么吗?
imageView.image = UIImage(named: "stone") // This returns nil.

再次,如果我将它们作为文件添加到项目中并通过此方法访问它们,我创建的一切都很好(或使用像SDWebImage这样的库),但我相信我正在失去应用程序稀疏的能力,因为图像作为文件托管所以,例如当需要2倍时,iPhone 7将具有2倍和3倍分辨率.

extension UIImage {

    convenience init?(heicName: String,useScale: Bool = false) {
        guard let resourcePath = Bundle.main.path(forResource: heicName.fileName(fileExtension: .heic,useScale: useScale),ofType: nil) else {
            return nil
        }

        let url = URL(fileURLWithPath: resourcePath) as CFURL

        guard let source = CGImageSourceCreateWithURL(url,nil),let image = CGImageSourceCreateImageAtIndex(source,nil) else {
                return nil
        }

        self.init(cgImage: image)
    }

}

所以我的问题是,任何人都可以向我解释使用HEIC作为图像资源文件夹中托管的图像的过程,并使其与app thinning兼容(只需获取所需的资源,即2x,3x)?

更新:
在研究了更多之后,当我在图像视图上设置图像名称时,我意识到图像是从IB加载的.你知道这是如何在内部工作的吗?使用哪个构造函数将UIImage设置为UIImageView?

更新2:
我已向Apple提交了雷达:
Radar

Apple的资产编译器重新编码以各种内部格式(一些是标准格式和一些专有格式)进入它的所有图像,具体取决于一系列因素,包括图像类型,目标操作系统版本以及可能的其他因素.不幸的是,在撰写本文时,就HEIC文件而言,资产编译器似乎是错误的;如果我尝试将HEIC文件放入资产目录中,它似乎被省略了.图像数据不会复制到Assets.car文件中,该文件本身大小只有16 KB,只包含几个空B树.因此,当您尝试使用UIImage加载图像时,您什么也得不到.

幸运的是,由于资产编译器无论如何都会重新编码输入的所有图像,您只需将图像重新编码为另一种格式(我建议使用PNG,因为它是无损的),最终用户收到的结果文件应该与它与HEIF输入文件一样(具有讽刺意味的是,它可能最终被编码为HEIF,因为资产格式支持它).所以,在Apple修复资产编译器中的这个错误之前,我会这样做.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读