我需要加载4张图像进行同步编辑.当我从用户库加载它们时,内存超过500mb并崩溃.
在进行任何压缩尝试之前,这是来自原始分配转储的日志:
码:
var pickedImage = UIImage(data: imageData)
仪器:
我已经阅读了几篇关于压缩UIImages的帖子.我试过减少UIImage:
新守则:
var pickedImage = UIImage(data: imageData,scale:0.1)
仪器:
减少UIImage的规模没有效果?!很奇怪.
所以现在我尝试基于完整的UIImage创建JPEG压缩
新代码:
var pickedImage = UIImage(data: imageData) var compressedData:NSData = UIImageJPEGRepresentation(pickedImage,0) var compressedImage:UIImage = UIImage(data: compressedData)!//this is now used to display
仪器:
现在,我怀疑因为我正在转换它仍在加载的图像.由于这一切都发生在来自PHImageManager的回调中,我需要一种从NSData创建压缩UIImage的方法,但是将比例设置为0.1并没有.
所以关于如何从NSData压缩这个UIImage的任何建议都会挽救生命!
谢谢
解决方法
在处理图像之前,我最终硬编码了尺寸缩小.这是代码:
PHImageManager.defaultManager().requestImageForAsset(asset,targetSize:CGSizeMake(CGFloat(asset.pixelWidth),CGFloat(asset.pixelHeight)),contentMode: .AspectFill,options: options) { result,info in var minRatio:CGFloat = 1 //Reduce file size so take 1/2 UIScreen.mainScreen().bounds.width/2 || CGFloat(asset.pixelHeight) > UIScreen.mainScreen().bounds.height/2) { minRatio = min((UIScreen.mainScreen().bounds.width/2)/(CGFloat(asset.pixelWidth)),((UIScreen.mainScreen().bounds.height/2)/CGFloat(asset.pixelHeight))) } var size:CGSize = CGSizeMake((CGFloat(asset.pixelWidth)*minRatio),(CGFloat(asset.pixelHeight)*minRatio)) UIGraphicsBeginImageContextWithOptions(size,false,0.0) result.drawInRect(CGRectMake(0,size.width,size.height)) var final = UIGraphicsGetImageFromCurrentImageContext() var image = iImage(uiimage: final) }