PHAsset网址返回零图片

时间:2018-06-11 14:55:27

标签: ios swift phasset photokit

问题:使用从PHAsset获取的URL加载UIImage将返回nil。

上下文:我有一个与图像URL一起使用的UI组件,并且使用不同的提供程序填充在应用程序的不同部分。在特定情况下,我会收到PHAsset。

请求PHAsset网址的代码:

        let inputRequestOptions = PHContentEditingInputRequestOptions()
        inputRequestOptions.isNetworkAccessAllowed = true

        asset.requestContentEditingInput(with: inputRequestOptions, completionHandler: { (edittingInput, _) in
            guard let url = edittingInput?.fullSizeImageURL else {
                return
            }

            switch asset.mediaType {
            case .image: editMediaContentContainerPresenter.assets = [.image(url)]
            case .video: editMediaContentContainerPresenter.assets = [.movie(url)]
            default:
                debugPrint("unsupported asset")
            }
        })

将URL加载到UI组件内的UIImage中的代码:

func image(for url: URL, maximumPixelSize: CGFloat) -> UIImage? {
    let options = [kCGImageSourceCreateThumbnailWithTransform: true,
                   kCGImageSourceCreateThumbnailFromImageAlways: true,
                   kCGImageSourceThumbnailMaxPixelSize: maximumPixelSize] as CFDictionary

    guard let source = CGImageSourceCreateWithURL(url as CFURL, nil) else {
        return nil
    }

    guard let imageReference = CGImageSourceCreateThumbnailAtIndex(source, 0, options) else {
        return nil
    }

    return UIImage(cgImage: imageReference, scale: UIScreen.main.scale, orientation: .up)
}

特殊注意事项:我需要将PHAsset转换为URL,因为当前的UI组件正在与许多其他提供程序和应用程序的某些部分一起使用,并且所有这些都解析为URL。有时从该URL加载,但通常最多一次。更常见的是,它无法从提供的URL加载UIImage。

问题:如何获取有效的网址。

已经考虑了解决方案,但要避免:

  1. 使用phasset请求加载图像,然后将其单独保存到本地网址
  2. 传递UIImage而不是URL的

0 个答案:

没有答案