2009-02-01 18 views
5

Ho un programma iPhone con UIImage. Questa UIImage deve essere trasferita su un oggetto Image javascript in un UIWebView. Stavo pensando questo potrebbe essere fatto utilizzando un URL di dati mando al UIWebView in questo modo:URL dati/PNG da UIImage

[wview stringByEvaluatingJavaScriptFromString:@"loadimage('%d')",dataurlfromuiimage]; 

Così, ho bisogno di trasferire il mio UIImage in un Data: URL. Potrei farlo da solo se riesco a ottenere i dati PNG, ma non riesco a trovare come farlo neanche. Se c'è un modo migliore per inviare questo a WebView, sarebbe anche buono.

risposta

22

Per ottenere una rappresentazione NSData della vostra immagine in formato PNG, utilizzare

NSData *dataForPNGFile = UIImagePNGRepresentation(yourImage); 

Allo stesso modo, un rappresentazione JPEG può essere ottenuto utilizzando

NSData *dataForJPEGFile = UIImageJPEGRepresentation(yourImage, 0.9f); 

una volta ottenuto il NSData, è possibile scrivere nella directory di documenti utilizzando writeToFile: atomicamente :, quindi io credo che si possa passare come un URL locale (anche se io' non ho provato questo). Un'alternativa è usare la categoria Base64 NSData che François P. fa riferimento e in qualche modo inviarlo a JavaScript come Base64.

+1

È possibile che non si desideri utilizzare il metodo javascript base64 + per immagini di grandi dimensioni poiché viene utilizzata molta memoria - Safari manterrà caricate sia la versione base64 sia le versioni decodificate. Dovrebbe funzionare bene per le immagini di piccole dimensioni o se ne hai solo alcune di grandi dimensioni – rpetrich

0

Sfortunatamente, dovrai convertire UIImage in una rappresentazione di file dell'immagine, non nelle informazioni dei pixel decodificati memorizzate nella struttura UIImage. Cioè, dovrai in qualche modo scriverlo in un file temporaneo e ottenere i byte NSData non elaborati per il file (probabilmente JPEG ou PNG). Quindi utilizzare un encoder BASE64. Non credo che è già previsto da Apple, quindi potreste voglio guardare a questo articolo: http://www.cocoadev.com/index.pl?BaseSixtyFour