Solución:
Por favor revise google para 1 kb a bytes, será 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
Entonces, mientras obtenía el tamaño adecuado, agregué múltiples escenarios agregando imágenes en el paquete de aplicaciones y en las fotos en el simulador. Bueno, la imagen que tomé de mi Mac era de 299,0 KB.
Escenario 1: Agregar imagen al paquete de la aplicación
Al agregar una imagen en su Xcode, el tamaño de la imagen seguirá siendo el mismo en el directorio del proyecto. Pero si lo obtiene de su ruta, el tamaño se reducirá a 257,0 KB. Cuál es el tamaño real de la imagen utilizada en el dispositivo o simulador.
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
}
}
Escenario 2: Agregar una imagen a las fotos en el simulador
Al agregar una imagen a las fotos en el simulador o dispositivo, el tamaño de la imagen aumentó de 299,0 KB a 393,0 KB. Cuál es el tamaño real de la imagen almacenada en el directorio de documentos del dispositivo o del simulador.
Swift 4 y anteriores
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)
Rápido 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)
Añadiendo .Rodeado () le dará 393,0 KB y sin usarlo le dará 393,442 KB. Por lo tanto, verifique el tamaño de la imagen manualmente una vez usando el código anterior. Como el tamaño de la imagen puede variar en diferentes dispositivos y mac. Lo he comprobado solo en mac mini y en el simulador iPhone XS.
extension UIImage {
public enum DataUnits: String {
case byte, kilobyte, megabyte, gigabyte
}
func getSizeIn(_ type: DataUnits)-> String {
guard let data = self.pngData() else {
return ""
}
var size: Double = 0.0
switch type {
case .byte:
size = Double(data.count)
case .kilobyte:
size = Double(data.count) / 1024
case .megabyte:
size = Double(data.count) / 1024 / 1024
case .gigabyte:
size = Double(data.count) / 1024 / 1024 / 1024
}
return String(format: "%.2f", size)
}
}
Ejemplo de uso: print("Image size (yourImage.getSizeIn(.megabyte)) mb")
Rápido 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
}
Tenga en cuenta la diferencia entre kB y KB. Respondiendo aquí porque en mi caso tuvimos un problema mientras consideramos kilobytes como 1024 bytes, pero el lado del servidor lo consideró como 1000 bytes, lo que causó un problema. Enlace para obtener más información.
PD. Casi seguro que irás con kB (1000).