我在用
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 { }
但是在这里我需要一个路径,但是如果没有路径,如何仅通过图像文件就能获得路径呢?
请检查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上进行过检查。