загрузить локальное изображение в UIWebView - PullRequest
1 голос
/ 05 августа 2011

Я хочу сделать скриншот и затем отправить в 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: //. Какое решение? Спасибо за любую помощь.

РЕДАКТИРОВАТЬ: добавлена ​​отсутствующая строка в коде

РЕШЕНИЕ. Я использовал совет Сирила и эту библиотеку для кодирования: http://cocoawithlove.com/2009/06/base64-encoding-options-on-mac-and.html

Ответы [ 3 ]

1 голос
/ 05 августа 2011

Если вам не нужно хранить изображение, вы можете преобразовать его в 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];
1 голос
/ 05 августа 2011

Конвертируйте его в схему URI данных base64 и отправьте его через Javascript, как вы сейчас делаете:

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

0 голосов
/ 05 августа 2011

Вы не сохранили изображение по этому пути.

...