Правильный способ загрузки изображения в UIWebView из объекта NSData - PullRequest
17 голосов
/ 13 мая 2010

Я загрузил изображение gif в объект NSData (я проверил содержимое объекта NSData, и он определенно заполнен). Теперь я хочу загрузить это изображение в мой UIWebView. Я пробовал следующее:

[webView loadData:imageData MIMEType:@"image/gif" textEncodingName:nil baseURL:nil];

но я получаю пустой UIWebView. Загрузка изображения с того же URL напрямую работает нормально:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:imageUrl]];
[imageView loadRequest:request];

Нужно ли мне устанавливать textEncodingName на что-то или я делаю что-то еще неправильно?

Я хочу загрузить изображение вручную, чтобы я мог сообщить о ходе работы пользователю, но это анимированный GIF, поэтому, когда это будет сделано, я хочу показать его в UIWebView.

Редактировать: Возможно, мне нужно как-то обернуть изображение в HTML? Есть ли способ сделать это без необходимости сохранять его на диск?

Ответы [ 10 ]

23 голосов
/ 05 февраля 2011

Я протестировал код с PNG ("изображение / png"), JPG ("изображение / jpeg") и GIF ("изображение / gif"), и он работает как ожидалось:

[webView loadData:imageData MIMEType:imageMIMEType textEncodingName:nil baseURL:nil];

А что не так с вашим приложением?

  • imageData не является правильно сформированными данными изображения. Попробуйте открыть файл с помощью веб-браузера или графического редактора, чтобы проверить его.
  • неверный тип MIME. Посмотрите на первые байты данных, чтобы определить фактический тип файла.
  • webView не подключен в IB, имеет ноль, скрыт, закрывается другим видом, находится вне экрана, имеет рамку CGRectZero и т. Д.
6 голосов
/ 13 мая 2010

Я действительно не пытался загрузить изображение в UIWebView, но поиск в Google дает мне. Я думаю, что ваша строка изображения должна иметь хороший путь и выглядеть как URL

NSString *imagePath = [[NSBundle mainBundle] resourcePath];
imagePath = [imagePath stringByReplacingOccurrencesOfString:@"/" withString:@"//"];
imagePath = [imagePath stringByReplacingOccurrencesOfString:@" " withString:@"%20"];

NSString *HTMLData = @"
<h1>Hello this is a test</h1>
<img src="sample.jpg" alt="" width="100" height="100" />";
[webView loadHTMLString:HTMLData baseURL:[NSURL URLWithString: [NSString stringWithFormat:@"file:/%@//",imagePath]]];

Подробнее см. Здесь: Загрузка локальных файлов в UIWebView

4 голосов
/ 11 февраля 2011
UIImage *screenshot= [UIImage imageAtPath:
                              [[NSBundle mainBundle] pathForResource:@"MfLogo_aboutus" ofType:@"png"]]; 
NSData *myData = UIImagePNGRepresentation(screenshot); 
[vc addAttachmentData:myData mimeType:@"image/png" fileName:@"logo.png"];
3 голосов
/ 19 сентября 2012

У меня была такая же проблема, и я нашел где-то еще, что вы должны указать значение в параметре baseUR L. У меня также был набор кодировки:

textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@"http://localhost/"]];

Когда у меня было nil в параметре baseURL, оно не загружалось. Поместив что-то, что в принципе не имеет значения, все документы MS работали.

3 голосов
/ 22 декабря 2010

Вы можете загрузить urlImage в веб-представление, которое не сохраняется локально, как показано ниже code

NSString *str = @"";
        str = [str stringByAppendingString:@"http://t3.gstatic.com/images?q=tbn:7agzdcFyZ715EM:http://files.walerian.info/Funny/Animals/funny-pictures-firefox-file-transfer-is-complete.jpg"];
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]];
        [webView loadData:data MIMEType:@"application/jpg" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@"http://google.com"]];
1 голос
/ 14 мая 2010

Вы можете попробовать назначить делегата для веб-просмотра и реализовать метод:

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

Чтобы увидеть более конкретно, какую ошибку вы получаете. Если он не вызывается, реализуйте метод:

- (void)webViewDidFinishLoad:(UIWebView *)webView

также, просто чтобы убедиться, что что-то происходит, иначе может возникнуть проблема с UIWebView (при условии, что вы не вернули NO из webView:shouldStartLoadWithRequest:navigationType:)

0 голосов
/ 04 июля 2013
NSString *pathForFile = [[NSBundle mainBundle] pathForResource: @"fireballscopy" ofType: @"gif"];
    NSData *dataOfGif = [NSData dataWithContentsOfFile: pathForFile];
    [Web_View loadData:dataOfGif MIMEType:@"image/gif" textEncodingName:nil baseURL:nil];
0 голосов
/ 04 мая 2013

Вот альтернативный метод:

Сохраните загруженное изображение в папку с документами. Затем получите URL этого изображения. Затем напишите простой HTML-файл используя этот URL-адрес изображения в теге IMG SRC.

NSLog(@"url=%@", fileURL); // fileURL is the image url in doc folder of your app


//get the documents directory:
NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

//make a file name to write the data to using the documents directory:
NSString *fileName = [NSString stringWithFormat:@"%@/toOpen.html",
                      documentsDirectory];

//create simple html file and format the url into the IMG SRC tag
NSString *content = [NSString stringWithFormat:@"<html><body><img src=%@></body></html>",fileURL];
//save content to the documents directory
[content writeToFile:fileName
          atomically:NO
            encoding:NSStringEncodingConversionAllowLossy
               error:nil]; // now we have a HTML file in our doc

// open the HTML file we wrote in the webview

NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"life.html"];
NSURL *url = [NSURL fileURLWithPath:filePath];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[yourWebView loadRequest:request];
0 голосов
/ 21 января 2011

попробуйте этот код

// 1) Get: Get string from “outline.plist” in the “DrillDownSave”-codesample.
savedUrlString = [item objectForKey: @"itemUrl"];

// 2) Set: The url in string-format, excluding the html-appendix.
NSString *tempUrlString = savedUrlString;

// 3) Set: Format a url-string correctly. The html-file is located locally.
NSString *htmlFile = [[NSBundle mainBundle] pathForResource:tempUrlString ofType:@”html”];

// 4) Set: Set an “NSData”-object of the url-sting.
NSData *htmlData = [NSData dataWithContentsOfFile:htmlFile];

// 5. Gets the path to the main bundle root folder
NSString *imagePath = [[NSBundle mainBundle] resourcePath];

// 6. Need to be double-slashes to work correctly with UIWebView, so change all “/” to “//”
imagePath = [imagePath stringByReplacingOccurrencesOfString:@"/" withString:@"//"];

// 7. Also need to replace all spaces with “%20″
imagePath = [imagePath stringByReplacingOccurrencesOfString:@" " withString:@"%20"];

//  Load:   Loads the local html-page.
[webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:[NSString stringWithFormat:@"file:/%@//",imagePath]]];
0 голосов
/ 19 января 2011

Чтобы расширить комментарий Эда Марти:

Команда HTML для вставки образа base 64:

<img src="data:image/png;base64,##PUT THE BASE64 DATA HERE###" />

У меня есть категория (я не знаю, откуда она, а не я ...), доступная на моем веб-сайте, которая преобразует NSData в строковое представление Base64.

Заголовок Осуществление

Достаточно легко сделать, предполагая, что imageData - это переменная NSData, содержащая ваше изображение: [imageData base64Encoding] в приведенную выше строку.

...