iphone - Obtener NSData subyacente*de UIImage
(5)
Al inicializar un objeto UIImage
con init(data: originalData)
, ese 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á en bruto, va a ser aún más grande que cuando se usa UIImagePNGRepresentation
.
Puedo crear UIImage desde NSData utilizando el método [UIImage imageWithdata:]
o [UIImage initWithData]
.
Me pregunto si puedo recuperar el NSData * de un UIImage * existente?
algo en la línea de NSData* myData = [myImage getData];
Es esto imposible?
Gracias
Las cosas han cambiado desde que se dio la respuesta anterior, para aquellos que todavía están buscando porque comparten la preocupación de CipherCom: iOS 5 ha agregado la propiedad CIImage .
Puede esperar que un UIImage sea un objeto formateado para su visualización y no utilice los datos originales (probablemente en formato PNG o JPEG), sino más bien una matriz de píxeles u otro formato interno. En otras palabras, UIImage(data: foo)
no retendrá foo
.
Si solo quieres usarlo en otro lugar de tu programa, el UIImage original funcionará bien (supongo que ese no es el caso aquí)
Si desea serializar, la presentación de
UIImagePNGRepresentation(...)
funcionará pero se verá sobredimensionada si el original fuera un JPEG;UIImageJPEGRepresentation(...)
a menudo resultará en datos ligeramente sobredimensionados y es ligeramente con pérdida si su original fue PNG. Debería estar bien elegir uno según la forma en que se mostrará la imagen y el formato que espera que se proporcione. Si está utilizando PNG y quiere PNG, debe obtener un buen tamaño de archivo y datos casi idénticos, aparte de PNG especiales.Si desea obtener una copia exacta de los datos originales (tal vez para guardar un archivo después de hacer una miniatura, o SHA1), entonces debe guardarlo por separado. Puede hacer algo como:
var image:UIImage var imageData:NSData { didSet { image = UIImage(data: imageData) } }
Solo porque me encontré con esto y me gusta rápido :)
Aquí está la traducción rápida de la publicación de Caroiline.
var imageData = UIImagePNGRepresentation(image)
O
var imageData = UIImageJPEGRepresentation(image, 0.7)
NSData *imageData = UIImageJPEGRepresentation(image, 0.7); // 0.7 is JPG quality
o
NSData *imageData = UIImagePNGRepresentation(image);
Dependiendo de si desea sus datos en formato PNG o formato JPG.