我想截取屏幕截图然后向webview发送本地路径,以便显示它。我知道webview可以从NSBundle获取图像,但这个截图是动态创建的 - 我可以通过代码添加一些内容吗?
我是这样尝试的:
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:///或file://前缀来访问它。解决方案是什么? 谢谢你的帮助。
编辑:在代码中添加了缺失的行
解决方案:我使用Cyrille的建议和此库进行编码:http://cocoawithlove.com/2009/06/base64-encoding-options-on-mac-and.html
答案 0 :(得分: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];
答案 1 :(得分:1)
将其转换为base64 data URI scheme并通过您当前正在执行的Javascript发送:
someDOMelement.src = 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==)';
答案 2 :(得分:0)
您尚未将图像保存到该路径。