2012-05-21 4 views
9

Mi sto imbattendo in un problema strano con la mia manipolazione UIImage.iPhone iOS che salva i dati ottenuti da UIImageJPEGRepresentation() non riesce una seconda volta: ImageIO: CGImageRead_mapData 'open' non riuscito

Sto facendo una sincronizzazione di dropbox e devo memorizzare le mie immagini come file locali. Per fare ciò, risparmio utilizzando il UIImagePNGRepresentation(image) o UIImageJPEGRepresentation(image, 0.66)

Ecco il mio tipico flusso di lavoro: L'utente seleziona un'immagine o scatta una foto immagine viene assegnato a un IMAGEVIEW del visualizzazione dell'immagine UIImage viene salvato in un file utilizzando il metodo sotto

la prossima volta che l'utente riapre l'applicazione, ho letto l'immagine di nuovo dal file utilizzando

[UIImage imageWithContentsOfFile:fullImagePath] 

Questo funziona una volta.

La seconda volta che eseguo la routine, viene visualizzato il messaggio di errore riportato di seguito quando si tenta di salvare nuovamente l'immagine sul disco.

//saving the image 
NSData* data = isPNG?UIImagePNGRepresentation(image):UIImageJPEGRepresentation(image, 0.66); 
BOOL success = [data writeToFile:filepath atomically:YES]; 
if(!success) 
{ 
    DLog(@"failed to write to file: %@",filepath); 
} 


//loading the image 
[UIImage imageWithContentsOfFile:fullImagePath] 

sto ottenendo questo errore quando provo a ri-salvare un'immagine che sia già stato convertito in JPEG o PNG

2012-05-21 08:16:06.680 file already exists: NO 
ImageIO: CGImageRead_mapData 'open' failed '/var/mobile/Applications/C1312BF8-C648-4397-82F3-D93E4FAAD35F/Documents/imageData/LogoImage.jpg' 
error = 2 (No such file or directory) 
May 21 08:16:06 <Error>: ImageIO: JPEG Not a JPEG file: starts with 0xff 0xd9 
May 21 08:16:06 <Error>: ImageIO: JPEG Application transferred too few scanlines 

Mi sembra che questo errore sta accadendo a causa di me cercando di ri-salvare l'immagine come JPEG ancora una volta. Se chiedo alla vista di rendersi nel contesto (creando effettivamente una nuova immagine), l'errore non si verifica.

Qualcuno sa cosa sto sbagliando? Mi manca qualche tipo di metadata cercando di convertire un UIImage in dati, ricaricandolo e provando a convertirlo di nuovo dopo averlo visualizzato all'utente?

+0

Penso che il problema potrebbe essere il salvataggio dei dati con il formato jpeg e l'accesso al formato PNG vale a dire una volta i dati di immagine jpeg salvati allora quando imageview accedendo ai nsdata del problema di rappresentazione PNG potrebbe essere lì –

+0

Molto simile a: http://stackoverflow.com/ domande/5081297/ios-uiimagejpegrepresentation-error-not-a-jpeg-file-starts-with-0xff-0xd9 –

risposta

28

Ho incontrato qualcosa di simile prima. Sembrava che imageWithContentsOfFile tenesse aperto il file finché lo UIImage utilizzato per creare era ancora vivo. A quel tempo, avevo risolto il problema leggendo il file in uno NSData e creando quindi lo UIImage dal NSData invece del file direttamente.

+8

Tu ei tuoi figli dei bambini saranno fantastici per l'eternità! Mi è successo con la libreria aperta di HJCache, usando HJManagedImageV. Lo sto scrivendo, quindi i motori di ricerca riprendono la connessione. Grazie! –

+0

Santa merda, mi hai appena salvato diverse ore di lavoro. Ti devo – jpm

+0

Grazie mille !!! Ho trascorso la maggior parte della giornata, cercando di ottenere NSFileManager per salvare/caricare una dannata immagine !!! Finalmente con la tua risposta, funziona, grazie ancora :) – Supertecnoboff

Problemi correlati