将PHAsset转换为UIImage时丢失透明度

6
在我从图片选择器中选择一张图片并尝试将PHAsset转换为UIImage时,png图像的透明度丢失了。 我尝试到处搜索,但没找到有关此问题的任何信息。
  func getAssetThumbnail(asset: PHAsset) -> UIImage {
        let manager = PHImageManager.defaultManager()
        let option = PHImageRequestOptions()
        var thumbnail = UIImage()
        option.synchronous = true
        manager.requestImageForAsset(asset, targetSize: CGSize(width: 341.0, height: 182.0), contentMode: .AspectFit, options: option, resultHandler: {(result, info)->Void in
            thumbnail = result!
        })
        return thumbnail
    }

选中并设置为图像视图后

选中并设置为图像视图后

之前的图像

之前的图像


你尝试过使用原始图像数据创建图像吗?即使用PHImageRequestOptions.version = .Original调用requestImageDataForAsset。然后你可以通过 UIImage(data: data)来创建图像。 - Luke Van In
不,我会尽力等一下。 - O-mkar
@LukeVanIn 我试过了,不起作用。 - O-mkar
是的,Luke,它有效,请将其发布为答案,以便我可以接受它 :) - O-mkar
很棒当直觉得到验证 :) 随意编辑答案。 - Luke Van In
1个回答

8
通过调用 requestImageDataForAsset 并使用 PHImageRequestOptions.version = .Original,可以获取原始图像数据。然后可以使用 UIImage(data: data) 创建图像。
示例:
 func getThumbnail(asset: PHAsset) -> UIImage? {

    var thumbnail: UIImage?

    let manager = PHImageManager.defaultManager()

    let options = PHImageRequestOptions()

    options.version = .Original
    options.synchronous = true

    manager.requestImageDataForAsset(asset, options: options) { data, _, _, _ in

        if let data = data {
            thumbnail = UIImage(data: data)
        }
    }

    return thumbnail
}

有时会返回nil,因为图像是从内部块设置的,是否有解决此问题的方法? - Patel Jigar
它能工作,但用户想要看到透明和裁剪(调整)后的图像,该怎么处理? - Ancle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接