Correct way to load image into UIWebView from NSData object

前端 未结 10 2030
北恋
北恋 2020-12-03 05:26

I have downloaded a gif image into an NSData object (I\'ve checked the contents of the NSData object and it\'s definitely populated). Now I want to load that image into my U

相关标签:
10条回答
  • 2020-12-03 05:46

    Here's an alternative method:

    Save the image you downloaded into your documents folder. Then get that image's url. Then write a simple html file using that image url in the IMG SRC tag.

    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 讨论(0)
  • 2020-12-03 05:49

    To expand on Ed Marty's comment:

    The HTML command to put in a base 64 image is:

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

    I have a category (I'm not sure where it came from, not me...) available on my website that converts NSData to it's Base64 string representation.

    Header Implementation

    Easy enough to do, assuming 'imageData' is the NSData variable containing your image: [imageData base64Encoding] into the above string.

    0 讨论(0)
  • 2020-12-03 05:50

    You can load urlImage into webview which is not saved locally as shown below 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"]];
    
    0 讨论(0)
  • 2020-12-03 05:56
    UIImage *screenshot= [UIImage imageAtPath:
                                  [[NSBundle mainBundle] pathForResource:@"MfLogo_aboutus" ofType:@"png"]]; 
    NSData *myData = UIImagePNGRepresentation(screenshot); 
    [vc addAttachmentData:myData mimeType:@"image/png" fileName:@"logo.png"];
    
    0 讨论(0)
  • 2020-12-03 05:59

    I tested the code with PNG ("image/png"), JPG ("image/jpeg") and GIF ("image/gif"), and it works as expected:

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

    Now, what's wrong with your app?

    • the imageData is not a well-formed image data. Try opening the file with a web browser or an image editor to check it.
    • the MIME type is incorrect. Look at the first bytes of the data to determine the actual file type.
    • webView is not connected in IB, is nil, is hidden, is covered with another view, is off screen, has a CGRectZero frame, etc.
    0 讨论(0)
  • 2020-12-03 05:59

    I had the same problem and I found somewhere else that you have to provide a value in the baseURL parameter. I also had encoding set:

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

    When I had nil in the baseURL parameter it would not load. By putting something that's basically irrelevant in there the MS docs all worked.

    0 讨论(0)
提交回复
热议问题