Правильный способ загрузки изображения в 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? Есть ли способ сделать это, не сохраняя его на диске?
Ответы
Ответ 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];