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