Swift 4:相位设置为图像会降低质量

Swift 4:相位设置为图像会降低质量,swift,uiimage,data-conversion,phasset,Swift,Uiimage,Data Conversion,Phasset,我正在使用一个名为OpalImagePicker的框架,它允许我选择多个图像,而不是一个。它返回一个相集数组。 我想得到这些相位集,将它们转换成图像,然后将它们转换成base64字符串,这样我就可以将它们发送到我的数据库。 但有一个问题:当我试图从PHAsset阵列获取图像时,图像的质量非常低 这是我的密码: let requestOptions = PHImageRequestOptions() requestOptions.version = .current

我正在使用一个名为OpalImagePicker的框架,它允许我选择多个图像,而不是一个。它返回一个相集数组。 我想得到这些相位集,将它们转换成图像,然后将它们转换成base64字符串,这样我就可以将它们发送到我的数据库。 但有一个问题:当我试图从PHAsset阵列获取图像时,图像的质量非常低

这是我的密码:

 let requestOptions = PHImageRequestOptions()
            requestOptions.version = .current
            requestOptions.deliveryMode = .opportunistic
            requestOptions.resizeMode = .exact
            requestOptions.isNetworkAccessAllowed = true
            let imagePicker = OpalImagePickerController()
            imagePicker.maximumSelectionsAllowed = 4
            imagePicker.allowedMediaTypes = Set([PHAssetMediaType.image])
            self.presentOpalImagePickerController(imagePicker, animated: true,
                select: { (assets) in
                    for a in assets{
                       // print(a)
                       // self.img.append(a.image)
                       self.img.append(a.imagehd(targetSize: CGSize(width: a.pixelWidth, height: a.pixelHeight), contentMode: PHImageContentMode.aspectFill, options: requestOptions))
以及功能:

func imagehd(targetSize: CGSize, contentMode: PHImageContentMode, options: PHImageRequestOptions?) -> UIImage {
           var thumbnail = UIImage()
           let imageManager = PHCachingImageManager()
           imageManager.requestImage(for: self, targetSize: targetSize, contentMode: contentMode, options: options, resultHandler: { image, _ in
               thumbnail = image!
           })
           return thumbnail
       }
我试图给“request options.version”“the.original”值,甚至给交付模式提供高质量,但它什么也没给我(图像为零) 我真的迷路了。有人能帮忙吗?
非常感谢。

imageManager.requestImage是一种异步方法。您不能等待异步方法完成以返回缩略图。您需要的是在imagehd方法中添加一个完成处理程序。好的,我通过使用API中的另一个委托方法找到了一个替代方法,该方法自动提供图像而不是资产。我尝试添加一个完成处理程序,但遗憾的是,它没有改变任何事情。感谢您的回答,这可能是解决方案的一部分!它没有改变任何东西太模糊了。请编辑您的问题并发布代码
。机会主义的
可能会多次调用您的完成处理程序。如果synchronous属性为NO,Photos可以调用resultHandler块(您在requestImageForAsset:targetSize:contentMode:options:resultHandler:method中多次指定。照片可能会调用结果处理程序一次,以提供适合在准备高质量图像时临时显示的低质量图像。如果低质量图像数据立即可用,则第一次调用可能会在requestImageForAsset:targetSize:contentMode:options:resultHandler:method返回。当高质量图像准备就绪时,Photos会再次调用结果处理程序来提供它。如果图像管理器已经缓存了请求的图像,或者synchronous属性为“是”,Photos只会调用结果处理程序一次。我明白了。感谢您提供的详细信息led解释,我来试试!