PHImageManager在生成图像时抛出异常

时间:2016-01-31 18:01:50

标签: ios swift

我有这个问题。当我尝试使用此方法从资产生成图像时:

   manager.requestImageForAsset(asset, targetSize: CGSize(width: asset.pixelWidth, height: asset.pixelHeight), contentMode: .AspectFit, options: option, resultHandler: {(result, info)->Void in
            thumbnail = result!

正如您所看到的,我已经放入了目标大小,宽度为“asset.pixelWidth”,我相信它会返回资产的实际宽度,因此我希望生成的图像具有与原始资产相同的尺寸。

出于某种原因,这会在我的相机胶卷中的某些图像上引发异常“在展开可选”时意外发现nil,不是全部,而是其中一些。更有趣的是,当我将目标尺寸100放在例如宽度和宽度上时。高度。它适用于相机胶卷上的所有资产,无例外。

老实说,我不明白这里到底发生了什么。所以,如果有人能给我一个很好的线索。

这是使用的整个方法:

func getFullAssetImg(asset: PHAsset) -> UIImage {
        let manager = PHImageManager.defaultManager()
        let option = PHImageRequestOptions()
        var thumbnail = UIImage()
        option.synchronous = true

        print(asset.pixelWidth)
        print(asset.pixelHeight)

        manager.requestImageForAsset(asset, targetSize: CGSize(width: asset.pixelWidth, height: asset.pixelHeight), contentMode: .AspectFit, options: option, resultHandler: {(result, info)->Void in
            thumbnail = result!
        })

        return thumbnail
    }

这就是它的名称:

let image = self.getFullAssetImg(asset)

-------- -------- UPDATE

当我添加一个带值的选项时:

options.deliveryMode = .FastFormat

有效!如果我使用值 HighQualityFormat 创建此选项,则会抛出异常

它现在正在运作,但是如果有人可以告诉我这个选项如何解决我的问题,可以帮助其他人。

1 个答案:

答案 0 :(得分:0)

逗人,

在花了一整天后,我终于知道这里发生了什么:

感谢此链接:PHImageManager.requestImageForAsset returns nil

我注意到一个名为networkAccessAllowed的选项。此选项使管理员能够在云上处理图像。

出现问题的是我正在测试一张基于icloud的图片,所以它返回的是零。

然而,这是我开始工作的最后一段代码:

        func getFullAssetImg(asset: PHAsset) {
        let manager2 = PHImageManager.defaultManager()


        print(asset.pixelWidth)
        print(asset.pixelHeight)
        //let imageSize = CGSize(width: asset.pixelWidth, height: asset.pixelHeight)

        let options = PHImageRequestOptions()
        options.deliveryMode = .FastFormat
        options.synchronous = true
        options.networkAccessAllowed = true

        manager2.requestImageForAsset(asset, targetSize: PHImageManagerMaximumSize, contentMode: .AspectFit, options: options, resultHandler: {(result, info)->Void in
                if let thumbnail = result{
                    self.fullResolutionImages.addObject(thumbnail)
                    print("Full Resolution Image Added")
            }
        })


    }

希望以后可以帮到某人。

谢谢