2009-02-01 6 views
5

J'ai un programme iPhone qui a un UIImage. Cette UIImage doit être transférée vers un objet Image javascript dans un UIWebView. Je pensais cela pourrait être fait en utilisant une URL de données que je transmets à l'UIWebView comme ceci:URL de données/PNG de UIImage

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

Donc, je dois transférer mon UIImage en données: URL. Je pourrais le faire moi-même si je peux juste obtenir les données PNG, mais je ne peux pas trouver comment faire cela non plus. S'il y a une meilleure façon d'envoyer ceci à WebView, ce serait bien aussi.

Répondre

22

Pour obtenir une représentation NSData de votre image au format PNG, utilisez

NSData *dataForPNGFile = UIImagePNGRepresentation(yourImage); 

De même, une représentation JPEG peut être obtenue en utilisant

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

une fois que vous avez la NSData, vous pouvez écrire à votre répertoire documents à l'aide writeToFile: atomiquement :, puis je crois que vous pouvez le transmettre en tant URL locale (bien que je Je n'ai pas essayé ça). Une alternative est d'utiliser la catégorie Base64 NSData que François P. référence et en quelque sorte l'envoyer en JavaScript en Base64.

+1

Vous ne voudrez peut-être pas utiliser la méthode base64 + javascript pour les images de grande taille, car elle utilise beaucoup de mémoire - Safari conservera les versions base64 et décodées. Devrait bien fonctionner pour les petites images ou si vous n'en avez que quelques-unes – rpetrich

0

Malheureusement, vous devrez convertir votre UIImage en une représentation de fichier de votre image, pas les informations de pixels décodées qui sont stockées dans la structure UIImage. Autrement dit, vous devrez l'écrire dans un fichier temporaire et obtenir les octets NSData bruts pour le fichier (probablement JPEG ou PNG). Ensuite, utilisez un encodeur BASE64. Je ne pense pas qu'il est déjà fourni par Apple, donc peut-être vous voulez regarder cet article: http://www.cocoadev.com/index.pl?BaseSixtyFour

Questions connexes