2017-06-19 81 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) 
}