Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get image file size in Swift?

I am using

UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIPopoverControllerDelegate 

these delegates for choosing image from my gallery or my camera. So, how can I get image file size after choosing an image?

I want to use this:

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 {     } 

but here I need a path, but how can I get without a path, just by image file?

like image 859
Orkhan Alizade Avatar asked Dec 14 '15 08:12

Orkhan Alizade


1 Answers

Please check the google for 1 kb to bytes it will be 1000.

https://www.google.com/search?q=1+kb+%3D+how+many+bytes&oq=1+kb+%3D+how+many+bytes&aqs=chrome..69i57.8999j0j1&sourceid=chrome&ie=UTF-8


So while getting the proper size I’ve added multiple scenario by adding image in App Bundle and in photos in simulator. Well the image which I took from my Mac was of 299.0 KB.


Scenario 1: Adding image to Application Bundle

On adding image in your Xcode the size of the image will remain same in project directory. But you get it from its path the size will be reduced to 257.0 KB. Which is the actual size of the image used in the device or simulator.

    guard let aStrUrl = Bundle.main.path(forResource: "1", ofType: "png") else { return }     let aUrl = URL(fileURLWithPath: aStrUrl)    print("Img size = \((Double(aUrl.fileSize) / 1000.00).rounded()) KB")     extension URL {         var attributes: [FileAttributeKey : Any]? {             do {                 return try FileManager.default.attributesOfItem(atPath: path)             } catch let error as NSError {                 print("FileAttribute error: \(error)")             }             return nil         }          var fileSize: UInt64 {             return attributes?[.size] as? UInt64 ?? UInt64(0)         }          var fileSizeString: String {             return ByteCountFormatter.string(fromByteCount: Int64(fileSize), countStyle: .file)         }          var creationDate: Date? {             return attributes?[.creationDate] as? Date         }     } 

Scenario 2: Adding image to Photos in Simulator

On adding image to photos in simulator or device the size of the image increased from 299.0 KB to 393.0 KB. Which is the actual size of the image stored in the device or simulator’s document directory.

Swift 4 and earlier

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.count print("size of image in KB: %f ", Double(imageSize) / 1000.0) 

Swift 5

let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage  let imgData = NSData(data: image.jpegData(compressionQuality: 1)!) var imageSize: Int = imgData.count print("actual size of image in KB: %f ", Double(imageSize) / 1000.0)    

By adding .rounded() it will give you 393.0 KB and without using it it will give 393.442 KB. So please check the image size manually once using the above code. As the size of image may vary in different devices and mac. I've check it only on mac mini and simulator iPhone XS.

like image 176
Dhaivat Vyas Avatar answered Sep 19 '22 16:09

Dhaivat Vyas