2011-08-21 9 views
5

私のiPhoneアプリケーションでは、カメラで写真を撮ってから、ローカルに保存されたHTMLの中にその画像をUIWebViewに表示させたいと思っています。UIWebViewのカメラからUIImageを表示

UIImagePickerControllerからUIImageオブジェクトを取得しました。これをメモリに保存する方法を見つける必要があります。UIWebViewで参照できるようになりました。

UIWebViewの画像を自分自身のものにしたいだけではありません(写真をいくつかのHTMLで背景画像として使用し、他の画像を重ねて使用したいと思います)。あなたは間違いなく保存するオプションを持っている

NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]; 
[self.webView loadHTMLString:html baseURL:baseURL]; 
+0

この質問は、道に沿って助けてくれましたhttp://stackoverflow.com/questions/2453023 –

+0

似たような質問があります:http://stackoverflow.com/questions/2171029/how-to-display-locally-stored-images-with-a-uiwebview – user281300

答えて

5

これが私のやり方です。カメラを使って撮影した画像は、私が実際にディスクに直接ファイルを保存処理するコードでは:

// Get the image out of the camera 
UIImage *image = (UIImage *)[info valueForKey:UIImagePickerControllerOriginalImage]; 

// Images from the camera are always in landscape, so rotate 
UIImage *rotatedImage = scaleAndRotateImage(self.image); 

// Save the image to the filesystem 
NSData *imageData = UIImagePNGRepresentation(rotatedImage); 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsPath = [paths objectAtIndex:0]; 
NSString* savePath = [documentsPath stringByAppendingPathComponent:@"CameraPhoto.png"]; 
BOOL result = [imageData writeToFile:savePath atomically:YES]; 

画像を回転させる機能

はこのブログ、 http://blog.logichigh.com/2008/06/05/uiimage-fix/から直接コピーされます。

次に、このイメージをUIWebView内に表示する場合は、文字列を置き換えて、イメージへのパスを参照するように置換します。私のHTMLにはのようなものがあります:

// Build the reference to the image we just saved 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsPath = [paths objectAtIndex:0]; 
NSString *cameraImagePath = [documentsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"CameraPhoto.png?x=%@", [[NSDate date] description]]]; 

// Load the HTML into the webview 
NSString *htmlFilePath = [[NSBundle mainBundle] pathForResource:@"MyHtmlFile" ofType:@"htm"]; 
NSString *html = [NSString stringWithContentsOfFile:htmlFilePath encoding:NSUTF8StringEncoding error:nil]; 
html = [html stringByReplacingOccurrencesOfString:@"{CameraPhotoUrl}" withString:cameraImagePath]; 
NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]; 
[self.webView loadHTMLString:html baseURL:baseURL]; 

Voila!キャッシングを防ぐために、ファイル名CameraPhoto.pngに日付ベースのクエリ文字列パラメータを追加することに注意してください。

6

:私も同じように、バンドルパスにのUIWebViewのbaseURLを設定することにより、参照てることを、アプリに保存されている他の画像やHTMLを使用していますローカルにファイルを作成し、絶対パスを取得して使用します。 私がハイブリッドアプリケーションに使用したもう1つのオプションは、UIImageをBase64文字列に変換し、javascriptを使ってwebviewに渡して、何をしたいかを行います。そのUIImageがそれをエンコード取得した後(これを行うにはそこにさまざまなライブラリがあることを行うには :

UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
NSString *base64EncodedImage = [Base64 encode:UIImageJPEGRepresentation(image, 0.5)]; 

は、その後、あなたのHTMLにあなたがbase64で画像を与え、いくつかのIMGに設定しますされているメソッドを持つことができますか背景または任意のあなたが必要:

function cameraCallback(imageData) { 
    var image = document.getElementById('myImage'); 
    image.src = "data:image/jpeg;base64," + imageData; 
} 

それとも

<img src="data:image/gif;base64, [YOUR BASE64 STRING HERE]" alt="" width="80" height="15" /> 

次にあなたが

を使用するのWebViewでHTMLで
[mywebview stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"cameraCallback(%@)", base64EncodedImage]]; 
+0

興味深いことに、私はそれがうまくいくと思います。実際にファイルをディスクに保存する必要がないようにするのがよい方法です。私の最終的な解決策を以下に示します。 –

+0

すてきな解決策ですが、大きな画像の方が遅く見えます。 –

関連する問題