【问题标题】:Can get image from PHAsset of library可以从库的 PHAsset 中获取图像
【发布时间】:2017-05-11 10:23:44
【问题描述】:

我使用QBImagePickerController 一次选择多个图像。

所以,这是我的全部代码

我正在向imagepickerController 提交此代码

let imagePickerController = QBImagePickerController()
imagePickerController.delegate = self
imagePickerController.allowsMultipleSelection = true
imagePickerController.mediaType = .Image
self.presentViewController(imagePickerController, animated: 
true, completion: nil)

所以当我选择多张图片并点击完成时,这个方法称为

func qb_imagePickerController(imagePickerController: QBImagePickerController!, didFinishPickingAssets assets: [AnyObject]!) {
        for asset in assets {
            print(asset.fileName)   
        }
        self.dismissViewControllerAnimated(true, completion: nil)
    }

例如,我选择了一张图像,然后它会像这样打印

<PHAsset: 0x7fc55d954500> 6006CE57-81FE-4DC0-8C52-5DB43CE7638D/L0/001 mediaType=1/0, sourceType=1, (1920x1080), creationDate=2016-05-26 09:15:34 +0000, location=0, hidden=0, favorite=0 

如何获取图像并将其设置到 collectionview 中?

我从中获得了文件名,但不值得从中设置图像。

我使用了 filePathURL、fileURL、absoluteURL 但什么也没发生,它崩溃了

所以请帮我解决一下
谢谢

【问题讨论】:

标签: ios swift phasset


【解决方案1】:

您需要使用requestImageForAsset 来获取UIImage。 你可以像这样得到图像

func qb_imagePickerController(imagePickerController: QBImagePickerController!, didFinishPickingAssets assets: [AnyObject]!) {


    let requestOptions = PHImageRequestOptions()
    requestOptions.resizeMode = PHImageRequestOptionsResizeMode.Exact
    requestOptions.deliveryMode = PHImageRequestOptionsDeliveryMode.HighQualityFormat
    // this one is key
    requestOptions.synchronous = true

    for asset in assets
    {
        if (asset.mediaType == PHAssetMediaType.Image)
        {

            PHImageManager.defaultManager().requestImageForAsset(asset as! PHAsset, targetSize: PHImageManagerMaximumSize, contentMode: PHImageContentMode.Default, options: requestOptions, resultHandler: { (pickedImage, info) in

                self.yourImageview.image = pickedImage // you can get image like this way

            })

        }
    }
    imagePickerController.dismissViewControllerAnimated(true, completion: nil)
}

【讨论】:

  • 我从 imagepicker 中选择多个图像并显示到我的收藏视图中。在该集合视图中,我有一个删除按钮,所以当我删除此图像时,如何将选择删除到 imagepickercontroller
  • 可以这样删除 imagePickerController.selectedAssets.removeObject(asset as!PHAsset)
  • 所以我必须将图像转换为资产,然后将其从选择中删除
  • 您无法将 UIImage 转换为 PHAssets。
  • 因此您需要维护 PHAssets 数组,例如 [PHAssets] 并且在那时删除 PHAssets 时,您需要从数组中获取 PHAssets 并删除该资产
【解决方案2】:

从 QBImagePickerController 中的 didFinishPickingAssets 从 Swift 4.2 中的 PHAsset 获取视频 URL

let imagePicker = QBImagePickerController()
imagePicker.delegate = self
imagePicker.numberOfColumnsInPortrait = 2
imagePicker.maximumNumberOfSelection = 2
imagePicker.allowsMultipleSelection = true
imagePicker.mediaType = .video

self.present(imagePicker, animated: true, completion: nil)

func qb_imagePickerController(_ imagePickerController: QBImagePickerController!, didFinishPickingAssets assets: [Any]!) {
    for asset in assets
    {
        PHCachingImageManager().requestAVAsset(forVideo: asset as! PHAsset, options: nil, resultHandler: {(asset, audioMix, info) -> Void in
            if asset != nil {
                let avasset = asset as! AVURLAsset
                let urlVideo = avasset.url
                yourarray.add(urlVideo as URL)
            }

        })

    }


    imagePickerController.dismiss(animated: true) {
        //You can access video urls here
        print("Total Videos:\(yourarray.count)")
    }

}

【讨论】:

    猜你喜欢
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    相关资源
    最近更新 更多