一尘不染

如何在Swift中获取图像文件的大小?

swift

我在用

UIImagePickerControllerDelegate,
UINavigationControllerDelegate,
UIPopoverControllerDelegate

这些代表从我的画廊或我的相机中选择图像。那么,选择图像后如何获得图像文件的大小?

我想使用这个:

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

但是在这里我需要一个路径,但是如果没有路径,如何仅通过图像文件就能获得路径呢?


阅读 446

收藏
2020-07-07

共1个答案

一尘不染

请检查google的1 kb到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


因此,在获得适当大小的同时,我通过在App Bundle中添加图像以及在模拟器中添加照片来添加了多种方案。好吧,我从Mac上拍摄的图像为299.0 KB。


方案1: 将图像添加到应用程序捆绑包

在Xcode中添加图片后,图片大小将在项目目录中保持不变。但是您可以从它的路径中获得它的大小,它将减小到257.0
KB。这是设备或模拟器中使用的图像的实际大小。

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

方案2: 在模拟器中将图像添加到照片

将图像添加到模拟器或设备中的照片时,图像的大小从299.0 KB增加到393.0 KB。存储在设备或模拟器的文档目录中的图像的实际大小。

Swift 4及更早版本

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)

斯威夫特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)

通过添加.rounded(),它将为您提供393.0 KB,如果不使用它,则将为393.442
KB。因此,请使用上述代码一次手动检查图像尺寸。由于图像的大小在不同的设备和Mac中可能会有所不同。我只在Mac mini和模拟器iPhone
XS上进行过检查。

2020-07-07