【问题标题】:Base 64 image into uiimage - Objective-C将 Base 64 图像转换为 uiimage - Objective-C
【发布时间】:2018-03-23 08:10:29
【问题描述】:

我正在尝试在 Objective-C 中将 base 64 图像插入 UIImage 我执行以下操作:

我已经把用户的图片变成了一个 NSURL

NSURL *url = [NSURL URLWithString: [fetchDefaults objectForKey:@"img"]];

然后我将 url 转换为 NSString

NSString *string=[NSString stringWithFormat:@"%@",url];

然后我清理字符串,并添加前缀“data:application/octet-stream;base64”,也尝试使用“data:image/jpg;base64”

NSMutableString *tempStr = [NSMutableString stringWithString:string];
            [tempStr replaceOccurrencesOfString:@" " withString:@"+" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [tempStr length])];
              NSString *temp = [[NSString stringWithFormat:@"data:application/octet-stream;base64,%@",tempStr] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

最后将字符串转换为 NSData 以插入到 UImage 中

NSData *dat = [[NSData alloc]initWithBase64EncodedString:temp options:NSDataBase64DecodingIgnoreUnknownCharacters];
            [avatar setImage:[UIImage imageWithData:dat]];

尽管 dat 的值不为零,但当我将图像设置为 UIImage 时,图像没有显示,知道我在做什么错吗?

【问题讨论】:

  • Then I cast the url, into a NSString,这不是演员表,你应该使用NSString *string= [url absoluteString];,不是吗?而你所做的根本没有任何意义。为什么添加@"data:application/octet-stream;base64,%@" 应该使其成为 UIImage?与 URL 发生了什么?你能给我们[fetchDefaults objectForKey:@"img"]的值吗?如果它是一个 URL(真的),那么你需要下载它是有道理的。
  • in fetchDefaults 我有一个类似 iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAMAAACahl6sAAAAq1BMVEX///8ARIvvhhs7cKb7/P3G0uIAQooERo0PTpG9zN5Meanl6fHN2+n//vyYs9Dy9fn+ ... TkSuQmCC´ this string I need to add @"data:application/octet-stream;base64,%@"´ 的字符串来表示这是一个 base 64 字符串,那么我需要添加到 UIImageView 但我不知道我这样做是否正确。
  • "我需要添加@"data:application/octet-stream;base64,%@"´" 为什么?不是特别的。如果它已经正确完成,则不必这样做。

标签: ios objective-c iphone uiimageview base64


【解决方案1】:

据我了解,您的 base64 字符串位于 fetchDefaults

/*Get base64 string*/
NSString *base64 = [fetchDefaults objectForKey:@"img"];

使用这个 NSData 类别:https://searchcode.com/codesearch/view/40028750/

/*Convert base64 to NSData object*/
NSData *data = [[NSData alloc] initWithBase64EncodedString:base64];
/*Convert data to UIImage object*/
UIImage *image = [[UIImage alloc] initWithData:data];

【讨论】:

  • initWithBase64EncodedString:options: 自 iOS7 以来已经存在。不需要类别。
  • 很抱歉。很久没用Objective-C了。
  • 这正是我需要的!我已经实现了,一切都很好!谢谢朋友!
猜你喜欢
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 1970-01-01
  • 2020-11-27
  • 2015-11-11
  • 2011-07-20
相关资源
最近更新 更多