【问题标题】:Get data from the image asset从图像资产中获取数据
【发布时间】:2019-11-30 11:10:36
【问题描述】:

我在资产目录中有一张图片,我需要使用 scale 参数获取这张图片 (UIImage)。只有UIImage(data: scale:) 方法,但我无法使用该名称从资产中获取数据。我总是得到url = nil。可能问题出在目录结构上!?

我的代码:

if let url = Bundle.main.url(forResource: "countdown_photo_1", withExtension: "jpg") {
    return UIImage(data: try! Data(contentsOf: url), scale: scale)
}

我的目录结构:

我的 Contents.json:

{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "countdown_photo_1.jpg"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

【问题讨论】:

    标签: swift uiimage assets


    【解决方案1】:
    1. 通过调用 init(displayScale:) 来创建一个 UITraitCollection 以获得所需的比例。我们称之为tc

    2. 现在以通常的方式按名称从资产目录中获取 UIImage;让我们称之为im

    3. 提取其图片资源 (im.imageAsset);让我们称之为asset。这将我们指向图片的资产目录条目作为一个整体

    4. 最后,向图片资源请求与您在第一步中创建的特征集合对应的图片:asset.image(with:tc)

    那是你想要的比例的 UIImage,现在如果你需要它的数据你可以直接得到它。

    【讨论】:

      【解决方案2】:

      试试这个代码可能对你有用

      guard let img = UIImage(named: "countdown_photo_1.jpg") else { return }
      let data = img.jpegData(compressionQuality: 1)
      

      【讨论】:

        【解决方案3】:

        要从资源库中获取图像,请使用:

        UIImage(named: "countdown_photo_1")
        

        根据设备自动确定比例。对于.jpg 文件,您通常应该在资源库中包含文件的 1x、2x 和 3x 版本。

        由于 iOS App Thinning,与设备不兼容的分辨率不包含在资产文件中。例如,资产的 1x 副本不包含在 3x 设备上。

        如果您出于某种原因需要不兼容的分辨率文件,请不要使用资源库。只需将所有文件直接包含在您的包中即可。

        【讨论】:

          【解决方案4】:

          如果您需要直接访问该文件,您可以将其作为正常图像包含在资产目录之外。由于 .xcassets 中的 Xcode 5 资产采用特殊文件格式,无法直接访问。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-06-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多