2009-07-19 14 views
12

Sto visualizzando immagini di dimensioni molto grandi in UITableView, a causa di ciò la mia app si arresta dopo un po 'di tempo. Ora voglio ridimensionare l'immagine e salvarla sul disco. qualcuno può aiutarmi a ridimensionare l'immagine da NSData/UIImage e salvarla salvandola sul disco.Salva immagine in sandbox da UIImage in iPhone

Ho ottenuto il codice per ridimensionare l'immagine da UIImage, quindi come risultato ho il mio ridimensionato in immagine nell'oggetto UIImage, come salvarlo su sandbox iphone.

Grazie,

risposta

4

Stai chiedendo 'come faccio a scrivere un file' giusto?

Immagino che ci sia un po 'di complicazione nel fatto che probabilmente vorrai scrivere nella directory Libreria/Cache, quindi quando il telefono viene salvato non salvare questi file.

Ottenere la radice della cartella dell'app con NSHomeDirectory() e quindi aggiungere Libreria/Cache.

È possibile scrivere un NSData nel metodo fs w/a su NSData. Se hai un UIImage, puoi fare UIImageJPEGRepresentation() o UIImagePNGRepresentation per ottenere i dati.

+6

probabilmente si desidera utilizzare NSArray * percorsi = NSSearchPathForDirectoriesInDomains (NSCachesDirectory, NSUserDomainMask, SI); NSString * cachesDirectory = [percorsi objectAtIndex: 0]; Piuttosto che aggiungere "Libreria/Cache". –

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]; 

Sarà copiare l'immagine nella cartella documenti in sandbox con il nome Test.jpg.

Se si vuole farlo per PNG si può provare UIImagePNGRepresentation(image);

30

Ecco il codice per salvare la directory Documenti su iOS che è da codice funzionante.

// 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

Risposta eccezionale, mi ha aiutato. È semplice (una riga di codice) accedere nuovamente a quei dati? O dovrei fare un'altra domanda sullo stack? – KKendall

+1

@KKendall puoi semplicemente fare '[NSData dataWithContentsOfFile:]' o '[UIImage imageWithContentsOfFile:]' – Liron

+1

JPEG è un formato lossy, quindi ti consiglio di usare invece UIImagePNGRepresentation. Avrai problemi di qualità se scrivi/leggi l'immagine su/da disco ripetutamente. – user1021430