How to get image size in KB or Mb from image picker?

7.9k Views Asked by At

I'm facing some issue to get image size in my code here is what I'm doing:

let imageData : NSData = UIImageJPEGRepresentation(images[0], 1) as! NSData 
let formatter = ByteCountFormatter() 
formatter.allowedUnits = .useKB 
formatter.countStyle = .binary 
let imageSize = formatter.string(fromByteCount: Int64(imageData.length))
print(imageSize)
3

There are 3 best solutions below

8
Jitendra Modi On

Here You can get image size

  func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
            var Size = Float()
            var data = Data()
            btnCancel.isUserInteractionEnabled = true

            if let mediaType = info[UIImagePickerControllerMediaType] as? String {

                if mediaType  == "public.image" {
                    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
                        data = UIImageJPEGRepresentation(pickedImage, 1.0)!
                      //Here you get MB size
                        Size = Float(Double(data.count)/1024/1024)

                      //For Kb just remove single 1024 from size 

                      // I am checking 5 MB size here you check as you want
                        if Size <= 5.00{
                            // Here your image
                        }  
                    }
                }
                else
                if mediaType == "public.movie" {
                    let videoURL = info[UIImagePickerControllerMediaURL] as? URL
                    data = try! Data.init(contentsOf: videoURL!)
                    Size = Float(Double(data.count)/1024/1024)
                    if Size <= 5.00{
                        //your video here
                    }
                }
            }
            picker.dismiss(animated: true) {
                if Size > 5.0{
                    Utilities.showAlertView(title: "title", message: "message")
                }
            }
        }

        func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
            picker.dismiss(animated: true, completion: nil)
        }
0
Ankit Jayaswal On

You can simply check the size in KB by the following UIImage extension:

extension UIImage {
    func logImageSizeInKB(scale: CGFloat) -> (Int, Data) {
        let data = UIImageJPEGRepresentation(self, scale)!
        let formatter = ByteCountFormatter()
        formatter.allowedUnits = ByteCountFormatter.Units.useKB
        formatter.countStyle = ByteCountFormatter.CountStyle.file
        let imageSize = formatter.string(fromByteCount: Int64(data.count))
        print("ImageSize(KB): \(imageSize)")

        return (Int(Int64(data.count) / 1024), data)
    }
}

Note:

Can use UIImagePNGRepresentation too for png image size. By the way PNG images are heavier than JPEG/ JPG.

0
AtulParmar On

Try this code, to get image size when getting an image from picker view.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        dismiss(animated: true, completion: nil);

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