2011-08-05 156 views
0

我想截圖,然後發送到webview的本地路徑,因此它會顯示它。我知道webview可以從NSBundle中獲取圖片,但是這些截圖是動態創建的 - 我可以通過代碼添加一些東西嗎?加載本地圖像到UIWebView

我試圖像這樣:

UIGraphicsBeginImageContext(webView.bounds.size);  
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext();  

    NSString *file = @"myfile.png"; 
    NSString *directory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) objectAtIndex:0]; 
    NSString *path = [directory stringByAppendingPathComponent: file]; 
    [UIImagePNGRepresentation(viewImage) writeToFile:path atomically:YES]; 

    NSString *function = [NSString stringWithFormat:@"loadImagePlease(%@);",path]; 
    [ ad stringByEvaluatingJavaScriptFromString:function]; 

但loadImageFunction不能訪問它,與文件:///或file://前綴。什麼是解決方案? 感謝您的任何幫助。

編輯:在代碼中添加缺少的行

解決辦法:我使用的西里爾的建議,這個庫進行編碼:http://cocoawithlove.com/2009/06/base64-encoding-options-on-mac-and.html

回答

1

將其轉換爲base64 data URI scheme和發送通過JavaScript作爲目前工作:

someDOMelement.src = 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO 9TXL0Y4OHwAAAABJRU5ErkJggg==)';

+0

謝謝,這工作! – Piotr

+0

它的工作原理;) – Cyrille

+0

嘿,還有一個問題 - 所以移動Safari本身不能訪問本地文件?這就是爲什麼我們需要這種旁路? – Piotr

0

您沒有圖像保存到該路徑。

+0

我只是刪除它,而刪除註釋 - 我的錯。現在,Safari Mobile似乎沒有file:///協議。問題在哪裏? – Piotr

1

如果您不需要存儲圖像,你可以將其轉換爲NSData並直接加載UIWebView,完全跳過的網址:

NSData *data = UIImagePNGRepresentation(viewImage); 
[myUIView loadData:data MIMEType:@"image/jpeg" textEncodingName:@"UTF-8" baseURL:nil]; 

更新:

既然你需要存儲該文件,使用NSFileManager來獲取您的目錄的URL,然後使用URL來寫入和檢索文件:

NSURL *pathUrl = [[NSFileManager defaultManager] URLForDirectory:directory inDomains:NSDocumentDirectory appropriateForURL:nil create:NO error:nil]; 
NSURL *fileUrl = [pathUrl URLByAppendingPathComponent:file]; 
[UIImagePNGRepresentation(viewImage) writeToURL:fileUrl atomically:YES]; 
NSString *urlString = [fileUrl absoluteString]; 
+0

很遺憾,我不想只顯示圖像。它應該只是網站的一小部分,我無法從應用程序加載所有html&css&js代碼。它只需要一個到本地文件的路徑。 – Piotr

+0

pathUrl不應該像'NSURL * pathUrl = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSDocumentDirectory appropriateForURL:nil create:NO er​​ror:nil];'?無論如何 - 它不想加載它。 – Piotr