2011-08-21 5 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을 사용하고 있습니다 파일을 로컬로 가져 와서 절대 경로를 얻고 사용합니다. 내가 하이브리드 응용 프로그램에 한 번 사용한 또 다른 옵션은 UIImage를 Base64 문자열로 변환하고 자바 스크립트를 통해 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" /> 

가 그런 다음 웹보기에서 HTML에 당신이

을 사용합니다
[mywebview stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"cameraCallback(%@)", base64EncodedImage]]; 
+0

흥미 롭다면, 나는 효과가 있었을 것이라고 생각합니다. 실제로 디스크에 파일을 저장하지 않아도되는 좋은 방법입니다. 내 최종 솔루션은 아래와 같습니다. –

+0

멋진 솔루션이지만 큰 이미지의 경우 느려 보입니다. –