Подтвердить что ты не робот

Правильный способ загрузки изображения в UIWebView из объекта NSData

Я загрузил 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? Есть ли способ сделать это, не сохраняя его на диске?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Я действительно не пытался загружать изображение в 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

Ответ 3

UIImage *screenshot= [UIImage imageAtPath:
                              [[NSBundle mainBundle] pathForResource:@"MfLogo_aboutus" ofType:@"png"]]; 
NSData *myData = UIImagePNGRepresentation(screenshot); 
[vc addAttachmentData:myData mimeType:@"image/png" fileName:@"logo.png"];

Ответ 4

Вы можете загрузить urlImage в webview, который не сохраняется локально, как показано ниже.

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"]];

Ответ 5

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

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

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

Ответ 6

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

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

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

- (void)webViewDidFinishLoad:(UIWebView *)webView

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

Ответ 7

Чтобы развернуть комментарий Эд Марти:

Команда HTML для размещения изображения базы 64:

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

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

Заголовок Реализация

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

Ответ 8

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

// 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]]];

Ответ 9

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

Сохраните изображение, загруженное в папку документов. Затем получите этот 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];

Ответ 10

NSString *pathForFile = [[NSBundle mainBundle] pathForResource: @"fireballscopy" ofType: @"gif"];
    NSData *dataOfGif = [NSData dataWithContentsOfFile: pathForFile];
    [Web_View loadData:dataOfGif MIMEType:@"image/gif" textEncodingName:nil baseURL:nil];