Respuestas:
NSData *imageData = UIImageJPEGRepresentation(image, 0.7); // 0.7 is JPG quality
o
NSData *imageData = UIImagePNGRepresentation(image);
Dependiendo de si quieres tus datos en formato PNG o JPG.
Al inicializar un UIImage
objeto con init(data: originalData)
, eso originalData
se convertirá en datos sin procesar en algún tipo de formato interno. Estos datos se pueden recuperar más tarde con
let rawData = myImage.cgImage?.dataProvider?.data as Data?
Sin embargo, debido a que rawData
está crudo, será incluso más grande que cuando se usa UIImagePNGRepresentation
.
Puede esperar que un UIImage sea un objeto formateado para su visualización y, por lo tanto, no utilizará los datos originales (que probablemente estén en formato PNG o JPEG), sino más bien una matriz de píxeles o algún otro formato interno. En otras palabras,UIImage(data: foo)
no retendrá foo
.
Si solo desea usarlo en otra parte de su programa, el UIImage original funcionará bien (supongo que ese no es el caso aquí)
Si desea serializar, UIImagePNGRepresentation(...)
funcionará pero será demasiado grande si el original era un JPEG;UIImageJPEGRepresentation(...)
a menudo resultará en datos ligeramente sobredimensionados y con pérdidas si el original era PNG. Debería estar bien elegir uno según la forma en que se mostrará la imagen y el formato que espera que se le proporcione. Si está usando PNG dentro y quiere PNG fuera, debe obtener un buen tamaño de archivo y datos casi idénticos, aparte de los fragmentos especiales de PNG.
Si desea obtener una copia exacta de los datos originales (tal vez para guardar un archivo después de la miniatura o para SHA1), debe conservarlo por separado. Podrías hacer algo como:
var image:UIImage
var imageData:NSData {
didSet {
image = UIImage(data: imageData)
}
}
Rápido 4.2
let dataPng = image.pngData() // return image as PNG. May return nil if image has no CGImageRef or invalid bitmap format
let dataJpg = image.jpegData(compressionQuality: 1) // return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least)
Las cosas han cambiado desde que se dio la respuesta anterior, para aquellos que todavía buscan porque comparten la preocupación de CipherCom: iOS 5 ha agregado la propiedad CIImage .
CIImage
solo se establece si se inicializó con imageWithCIImage:
. Además, estos no son directamente los datos utilizados, sino otro objeto de representación de imágenes.
UIImageJPEGRepresentation
oUIImagePNGRepresentation
va a alterar los datos y hacer una reconversión. ¿Existe alguna forma de lograr realmente lo que se pidió?