2015-12-14 29 views
15

Sto usandoCome ottenere la dimensione del file immagine in Swift?

UIImagePickerControllerDelegate, 
UINavigationControllerDelegate, 
UIPopoverControllerDelegate 

questi delegati per la scelta di immagine dalla mia galleria o la mia macchina fotografica. Quindi, come posso ottenere le dimensioni del file immagine dopo aver scelto un'immagine?

voglio usare questo:

let filePath = "your path here" 
    var fileSize : UInt64 = 0 

    do { 
     let attr : NSDictionary? = try NSFileManager.defaultManager().attributesOfItemAtPath(filePath) 

     if let _attr = attr { 
      fileSize = _attr.fileSize(); 
      print(fileSize) 
     } 
    } catch { 
    } 

ma qui ho bisogno di un percorso, ma come posso ottenere senza un percorso, solo con file di immagine?

+1

Possibile duplicato di [Ottieni dimensioni di UIImage (lunghezza byte) non altezza e larghezza] (http://stackoverflow.com/questions/1296707/get-size-of-a-uiimage-bytes-length-not- height-and-width) –

risposta

37
var image = info[UIImagePickerControllerOriginalImage] as! UIImage 
    var imgData: NSData = NSData(data: UIImageJPEGRepresentation((image), 1)) 
// var imgData: NSData = UIImagePNGRepresentation(image) 
// you can also replace UIImageJPEGRepresentation with UIImagePNGRepresentation. 
    var imageSize: Int = imgData.length 
    print("size of image in KB: %f ", Double(imageSize)/1024.0) 
+0

Hai pensato dopo l'immagine compressa (UIImageJPEGRepresentation ((image), 0.5)) otterrai la dimensione corretta? –

+0

Ti darà la dimensione attuale della tua immagine. Ma puoi anche impostare la compressione su 1, quindi ti darà la dimensione dell'immagine originale senza compressione. –

+0

@DhaivatVyas E la compressione? Farà peggiorare la qualità delle mie immagini o è normale? Ora sto cercando il metodo di compressione per esso e se questo metodo è OK, allora lo farei io –

0

Prova questo

import Darwin 

...  

let size = malloc_size(&_attr) 
0
let selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImage 
let selectedImageData: NSData = NSData(data:UIImageJPEGRepresentation((selectedImage), 1)) 
let selectedImageSize:Int = selectedImageData.length 
print("Image Size: %f KB", selectedImageSize /1024.0) 
3

Swift 3

let uploadData = UIImagePNGRepresentation(image) 
let array = [UInt8](uploadData) 
print("Image size in bytes:\(array.count)") 
+0

Qual è la differenza tra uploadData.count e array.count? Devo trasmettere a [UInt8]? – magpoc

0

Swift 3/4:

if let imageData = UIImagePNGRepresentation(image) { 
    let bytes = imageData.count 
    let kB = Double(bytes)/1000.0 // Note the difference 
    let KB = Double(bytes)/1024.0 // Note the difference 
} 

Si prega di notare la differenza tra kB e KB. Risposta qui perché nel mio caso abbiamo riscontrato un problema mentre consideravamo kilobyte come 1024 byte ma il lato server lo considerava come 1000 byte che causava un problema. Link per saperne di più.

PS. Quasi sicuro che andrai con kB (1000).