ios – 如何在运行时正确压缩UIImages

前端之家收集整理的这篇文章主要介绍了ios – 如何在运行时正确压缩UIImages前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要加载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)
                }

猜你在找的Xcode相关文章