2017-06-19 80 views
0

我试图让图像的大小通过UIImagePicker内存问题检查图像尺寸

这里挑的是代码:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

    let image = info[UIImagePickerControllerOriginalImage] as! UIImage 
    var imgData: NSData = NSData(data: UIImageJPEGRepresentation((image), 1)!) 
    var imageSize: Int = imgData.length 
    print("size of image in KB: %f ", Double(imageSize)/1024.0) 
} 

这将引发一个错误:

Message from Debugger: Terminated due to Memory issue.

注意:磁盘上的映像文件大小约为75 MB。它适用于较小尺寸的图像。

+0

您已经有图像,然后通过其JPEG表示形成该图像的整个_new_版本,并且你也在内存中保存_that_,然后你从_that_中取出一个NSData,并在内存中保存_that_,当内存不足时你感到惊讶?究竟是什么问题呢?你最终甚至想要做什么? – matt

+0

看到我想要基本上只显示图像,如果它小于30 MB的大小。所以我必须检查大小。我理解这个问题,但无法找到解决方案。 –

+0

我要说的一件事是:你有图像。所以你可以检查它的大小。你不需要检查_else_的大小,这正是你正在做的。但我也在说:你不会“向”用户展示一个30 MB的图像。那会很愚蠢。屏幕无法保存这样的图像!您应该始终加载不超过显示用途所需的图像版本。 – matt

回答

0

您可以使用FileManager来检查文件大小(和其他属性)。要获取所选图像的URL,有一个UIImagePickerControllerOriginalImage密钥。它给你的文件的URL,你可以将它传递到文件管理器,如下所示:

if let imgURL : URL = info[UIImagePickerControllerOriginalImage] as? URL, 
let attribs = try? FileManager.default.attributesOfItem(atPath: imgURL.path) { 
    let size = attribs[FileAttributeKey.size] 
    print(size) 
}