How to display a base64 image within a UIImageView

2019-01-07 08:31发布

I got this Base64 gif image:

R0lGODlhDAAMALMBAP8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAACH5BAUKAAEALAAAAAAMAAwAQAQZMMhJK7iY4p3nlZ8XgmNlnibXdVqolmhcRQA7

Now I want to display this Base64 String within my IPhone App.

I could get this working by using the WebView:

aUIWebView.scalesPageToFit = NO;
aUIWebView.opaque = NO;
aUIWebView.backgroundColor = [UIColor clearColor]; 
[aUIWebView loadHTMLString:
  @"<html><body style=""background-color: transparent""><img src=""data:image/png;base64,R0lGODlhDAAMALMBAP8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAUKAAEALAAAAAAMAAwAQAQZMMhJK7iY4p3nlZ8XgmNlnibXdVqolmhcRQA7"" /></body></html>"
 baseURL:nil];

Is it possible to do the same thing by using the UIImageView?

11条回答
劳资没心,怎么记你
2楼-- · 2019-01-07 09:11

Code snippet for downloading a text file with base64 image string inside, then saving/reading the file and finally creating an image to display right in the view

In Case You Need To Decode Image To Base64 Click Here

NSString *downloadUrl = "http://www.server.com/file.txt";
//
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString: downloadUrl]];
//
// DOWNLOAD THE FILE
//
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue currentQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
    if (error) {

        NSLog(@"Download Error:%@",error.description);

    }
    if (data) {
        [data writeToFile:filePath atomically:YES];
        //
        // PROCESS BASE 64 STRING
        //
        NSString * fileContents = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
        //
        // PROCESS BASE 64 STRING
        //
        NSString *base64String = fileContents;
        NSURL *url = [NSURL URLWithString:base64String];
        NSData *imageData = [NSData dataWithContentsOfURL:url];
        //
        // CREATE IMAGE
        //
        UIImage *ret = [UIImage imageWithData:imageData];
        self.myImage.image = ret;
    }
}
查看更多
Explosion°爆炸
3楼-- · 2019-01-07 09:15

Just in case anyone is looking for the Swift code to accomplish this (based on the Objective-C answer provided by Jonathan M), here it is:

var data = NSData (base64EncodedString: base64String, options: NSDataBase64DecodingOptions(0))
var image = UIImage(data: data!)
查看更多
我只想做你的唯一
4楼-- · 2019-01-07 09:17

Objective-C

NSString *plainString = @"foo";

Encoding

NSData *plainData = [plainString dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64String = [plainData base64EncodedStringWithOptions:0];
NSLog(@"%@", base64String);  

Decoding

NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
NSString *decodedString = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding];
NSLog(@"%@", decodedString); 

Option

NSURL *URL = [NSURL URLWithString:
  [NSString stringWithFormat:@"data:application/octet-stream;base64,%@",
       base64String]];

 return [NSData dataWithContentsOfURL:URL];

Swift

let plainString = "foo"

Encoding

let plainData = (plainString as NSString).dataUsingEncoding(NSUTF8StringEncoding)
let base64String = plainData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromRaw(0)!)
println(base64String) 

Decoding

let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions.fromRaw(0)!)
let decodedString = NSString(data: decodedData, encoding: NSUTF8StringEncoding)    
println(decodedString) // foo
查看更多
手持菜刀,她持情操
5楼-- · 2019-01-07 09:18

Very old question, but as of iOS7 there is a new, much easier way to do so, hence I'm writing it here so future readers can use this.

NSData* data = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
UIImage* image = [UIImage imageWithData:data];

Very easy to use, and will not hit the 2048 byte size limit of a URL.

查看更多
The star\"
6楼-- · 2019-01-07 09:19

This Code will display an base64 encoded string as a picture:

NSString *str = @"data:image/jpg;base64,";
str = [str stringByAppendingString:restauInfo.picture];
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]];

restauInfo.picture is an NSString which contains the base64 encoded JPG

In my case the Value from "restauInfo.picture" comes from a database

查看更多
相关推荐>>
7楼-- · 2019-01-07 09:19

You can do something like the following:

(UIImage *)decodeBase64ToImage:(NSString *)strEncodeData {
  NSData *data = [[NSData alloc]initWithBase64EncodedString:strEncodeData options:NSDataBase64DecodingIgnoreUnknownCharacters];
  return [UIImage imageWithData:data];
}

Then call it like this:

UIImage *image = [self decodeBase64ToImage:dataString];
查看更多
登录 后发表回答