web-dev-qa-db-ja.com

NSDataオブジェクトからUIWebViewに画像をロードする正しい方法

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でラップする必要がありますか?ディスクに保存せずにこれを行う方法はありますか?

17
rustyshelf

PNG( "image/png")、JPG( "image/jpeg")、およびGIF( "image/gif")でコードをテストしましたが、期待どおりに機能します。

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

さて、あなたのアプリの何が問題になっていますか?

  • imageDataは整形式の画像データではありません。 Webブラウザまたは画像エディタでファイルを開いて確認してください。
  • mIMEタイプが正しくありません。データの最初のバイトを調べて、実際のファイルタイプを判別します。
  • webViewがIBに接続されていない、nilである、非表示になっている、別のビューで覆われている、画面外にある、CGRectZeroフレームがあるなど。
23
Costique

UIWebViewに画像を読み込もうとはしませんでしたが、グーグル検索で表示されます。画像の文字列には適切なパスが必要で、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にロードしています

6
vodkhang
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
pratap shaik

同じ問題が発生しましたが、どこか別の場所でbaseURLパラメーターに値を指定する必要があることがわかりました。エンコーディングセットもありました:

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

nilパラメータにbaseURLがあると、ロードされませんでした。基本的に無関係なものをそこに置くことで、MSドキュメントはすべて機能しました。

3
Brian W

Webビューにデリゲートを割り当てて、メソッドを実装してみてください。

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

発生しているエラーをより具体的に確認するには。呼び出されない場合は、次のメソッドを実装します。

- (void)webViewDidFinishLoad:(UIWebView *)webView

同様に、何かが発生していることを確認するために、そうでない場合はUIWebViewに問題がある可能性があります(webView:shouldStartLoadWithRequest:navigationType:からNOを返さなかったと仮定します)

1
Ed Marty

エドマーティのコメントを拡張するには:

Base64画像を挿入するHTMLコマンドは次のとおりです。

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

NSDataをBase64文字列表現に変換するカテゴリ(私ではなく、どこから来たのかわかりません...)がWebサイトにあります。

ヘッダー実装

'imageData'が画像を含むNSData変数であると仮定すると、簡単に実行できます:[imageDatabase64Encoding]上記の文字列に。

0
Carl

このコードを試してください

// 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
Chandaboy
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
Chirag Dj

別の方法は次のとおりです。

ダウンロードした画像をドキュメントフォルダに保存します。次に、その画像のURLを取得します。次に、IMGSRCタグでその画像のURLを使用して簡単なhtmlファイルを記述します。

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
GeneCode