2009-07-19 14 views
12

Estoy mostrando imágenes de gran tamaño en UITableView, debido a esto mi aplicación se bloquea después de un tiempo. Ahora quiero cambiar el tamaño de la imagen y guardarla en el disco. ¿alguien me puede ayudar a cambiar el tamaño de la imagen de NSData/UIImage y guardar guardarlo en el disco.Guardar imagen en sandbox desde UIImage en iPhone

Obtuve el código para cambiar el tamaño de la imagen de UIImage, por lo que el resultado es que cambie de tamaño en la imagen del objeto UIImage, cómo guardarlo en la caja de arena de iphone.

Gracias,

Respuesta

4

Estás preguntando '¿Cómo se escribe un archivo' derecho?

Supongo que hay un toque de complicación ya que probablemente quiera escribir en el directorio Biblioteca/Cachés, por lo que cuando se realiza una copia de seguridad del teléfono, no se guardan esos archivos.

Obtenga la raíz de la carpeta de la aplicación w/NSHomeDirectory() y luego anexe la Biblioteca/Cachés.

Puede escribir un NSData en el método fs w/a en NSData. Si tiene un UIImage, puede hacer UIImageJPEGRepresentation() o UIImagePNGRepresentation para obtener datos.

+6

es probable que desee utilizar NSArray * caminos = NSSearchPathForDirectoriesInDomains (NSCachesDirectory, NSUserDomainMask, SI); NSString * cachesDirectory = [paths objectAtIndex: 0]; En lugar de agregar 'Biblioteca/Caches' usted mismo. –

1

NSData *imgData = UIImageJPEGRepresentation(image, 1);

CGImageSourceRef source = CGImageSourceCreateWithData((CFMutableDataRef)imgData, NULL); 
NSDictionary *metadata = [(NSDictionary *) CGImageSourceCopyPropertiesAtIndex(source,0,NULL)autorelease]; 
NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Test.jpg"]; 
[imageMutableData writeToFile:jpgPath atomically:YES]; 

Copiará su imagen a la carpeta de documentos en la caja de arena con el nombre Test.jpg.

Si desea hacerlo por PNG puede probar UIImagePNGRepresentation(image);

30

Aquí es código para guardar en el directorio de documentos en IOS que es de código de trabajo.

// Convert UIImage to JPEG 
NSData *imgData = UIImageJPEGRepresentation(image, 1); // 1 is compression quality 

// Identify the home directory and file name  
NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Test.jpg"]; 

// Write the file. Choose YES atomically to enforce an all or none write. Use the NO flag if partially written files are okay which can occur in cases of corruption 
[imgData writeToFile:jpgPath atomically:YES]; 
+0

Respuesta impresionante, me ayudó. ¿Es simple (una línea de código) acceder nuevamente a esos datos? ¿O debería hacer otra pregunta en la pila? – KKendall

+1

@KKendall puede hacer '[NSData dataWithContentsOfFile:]' o '[UIImage imageWithContentsOfFile:]' – Liron

+1

JPEG es un formato con pérdida, por lo que recomiendo usar UIImagePNGRpresentation en su lugar. Tendrá problemas de calidad si escribe/lee la imagen en/desde el disco repetidamente. – user1021430

Cuestiones relacionadas