如何在UIImageView中显示base64图像?

jan*_*mon 50 iphone objective-c uiimageview uiimage

我得到了这个Base64 gif图像:

R0lGODlhDAAMALMBAP8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAACH5BAUKAAEALAAAAAAMAAwAQAQZMMhJK7iY4p3nlZ8XgmNlnibXdVqolmhcRQA7
Run Code Online (Sandbox Code Playgroud)

现在我想在我的iPhone应用程序中显示这个Base64字符串.

我可以通过使用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];
Run Code Online (Sandbox Code Playgroud)

是否可以通过使用UIImageView做同样的事情?

mas*_*che 128

您不必编码.只需创建一个NSUrl,它就知道"data:" - url.

NSURL *url = [NSURL URLWithString:base64String];    
NSData *imageData = [NSData dataWithContentsOfURL:url];
UIImage *ret = [UIImage imageWithData:imageData];
Run Code Online (Sandbox Code Playgroud)

正如评论中所提到的,您必须确保使用前置数据,data:image/png;base64,否则您的base64数据将毫无用处.

  • 是啊!这太超级了!也许值得一提的是,你必须在实际的原始base64字符串前面添加"data:image/png; base64"才能使其正常工作.我从阅读OP发布的WebView/HMLT代码中推断出这一点,但是我可以看到一些人可能错过了这种细微差别,然后这就行不通了. (10认同)
  • 这完全有效,为什么它被投票如此之多? (7认同)

Jon*_*n M 68

很老的问题,但是从iOS7开始,有一种新的,更简单的方法,因此我在这里写它,以便未来的读者可以使用它.

NSData* data = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
UIImage* image = [UIImage imageWithData:data];
Run Code Online (Sandbox Code Playgroud)

非常容易使用,并且不会达到URL的2048字节大小限制.


Tho*_*ues 15

此代码将显示base64编码的字符串作为图片:

NSString *str = @"data:image/jpg;base64,";
str = [str stringByAppendingString:restauInfo.picture];
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]];
Run Code Online (Sandbox Code Playgroud)

restauInfo.picture是一个NSString,它包含base64编码的JPG

在我的例子中,"restauInfo.picture"中的值来自数据库


Rad*_*821 8

您可以执行以下操作:

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

然后像这样称呼它:

UIImage *image = [self decodeBase64ToImage:dataString];
Run Code Online (Sandbox Code Playgroud)