2011-08-21 11 views
5

iPhone uygulamamda kullanıcının fotoğraf makinesini kullanarak fotoğraf çekmesini istiyorum, ardından bu resmin yerel olarak depolanan HTML arasında bir UIWebView içinde görünmesini istiyorum. UIWebView uygulamasındaki UIImage görüntüsünü görüntüleme

Yani şimdi ben UIWebView ona gönderimde böylece kaydedip için öğrenmek gerekir, UIImagePickerController den UIImage nesne var. Ben sadece başlıbaşına görüntüyü istemiyoruz

Not UIWebView (ben üstte katmanlı diğer görüntülerle bazı HTML bir background-görüntüsü olarak kullanmak istiyorsunuz). Kesinlikle kaydetme seçeneği

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

http://stackoverflow.com/questions/2453023 - yol boyunca bana yardımcı olan bu soruyu, yine de başkalarının ne söylediğini merak ediyorum. –

+0

Burada da benzer bir soru var: http://stackoverflow.com/questions/2171029/how-to-display-locally-stored-images-with-a-uiwebview – user281300

cevap

5

Bunu yapmamın yolu budur. kamera kullanılarak çekilen görüntü aslında diske doğrudan dosyayı kaydedin kolları kodu:

// 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]; 

görüntüyü döndürmek için fonksiyon

bu blog, http://blog.logichigh.com/2008/06/05/uiimage-fix/ düz kopyalanır.

Bu görüntüyü UIWebView içinde görüntülemek istediğimde, yalnızca görüntüye giden yolu enjekte etmek için bir dize yerine geçiyorum. Yani benim HTML sonra <img src="{CameraPhotoUrl}" /> ve benzeri yoktur:

// 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! Önbelleğe almayı önlemek için CameraPhoto.png dosya adına bir tarih tabanlı sorgu dizesi parametresi eklediğimi unutmayın.

6

: Ben de dedim ki, paket yola UIWebView arasında baseURL ayarlayarak referans ediyorum, uygulamasında saklanmış olan diğer görüntüleri ve HTML kullanıyorum Yerel olarak dosya, mutlak yol almak ve bunu kullanarak. Bir kez hibrid uygulaması için kullandığım başka bir seçenek UIImage - Base64 dizesini dönüştürüyor ve bunu yapmak istediğinizi yapmak için javascript'i web görünümüne aktarıyor. UIImage bunu kodlamak aldıktan sonra o Bunu yapmak için (çeşitli kütüphaneler bunu yapmak için orada vardır:

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

Ardından HTML'nize size base64 görüntüleri verildi ve bazı IMG ya geçirir yöntemi olabilir arka plan ya da ne gerekir:

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

ya

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

Sonra Web görünümündeki HTML sen

kullanırsınız
[mywebview stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"cameraCallback(%@)", base64EncodedImage]]; 
+0

İlginç, işe yarayacağını düşünüyorum. Dosyayı diske kaydetmekten kaçınmanın iyi bir yolu. Benim nihai çözüm aşağıda gösterilmiştir. –

+0

Güzel bir çözüm ancak büyük görüntüler için daha yavaş görünüyor. –