我有这个问题。当我尝试使用此方法从资产生成图像时:
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 创建此选项,则会抛出异常
它现在正在运作,但是如果有人可以告诉我这个选项如何解决我的问题,可以帮助其他人。
答案 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")
}
})
}
希望以后可以帮到某人。
谢谢