1

我想截屏,然后向 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

4

3 回答 3

1

将其转换为base64 数据 URI 方案并像您当前所做的那样通过 Javascript 发送:

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

于 2011-08-05T14:01:13.003 回答
1

如果您不需要存储图像,则可以将其转换为NSData并直接加载UIWebView,完全跳过 URL:

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];
于 2011-08-05T13:51:44.590 回答
0

您尚未将图像保存到该路径。

于 2011-08-05T13:48:13.527 回答