iOS Base64图片解码为空解决方案
2020-10-28 本文已影响0人
MeaningfulLiu
问题描述
我们在将App中嵌入的H5页面中的图片通过App端原生分享到微信,H5端拼接生成的图片通过Base64编码传参给App端,编码后的Base64图片无法通过下面方案一进行解码,Base64字符串解码成NSData为nil,但在浏览器上通过Base64图片解码工具(站长工具-图片Base64编解码)可以正常显示图片,由此判断H5端base64编码没有问题,应该是App端解码的问题,后经查资料探索,通过下面的方案二可以解码成功。
解决思路
正常解码思路(方案一):
/// base64字符串转图片
/// @param base64String 图片base64字符串
- (UIImage *)imageWithBase64String:(NSString *)base64String {
NSData *imageData = [[NSData alloc] initWithBase64EncodedString:base64String options:NSDataBase64DecodingIgnoreUnknownCharacters];
UIImage *image = [UIImage imageWithData:imageData];
return image;
}
DataURL解码(方案二):
/// base64字符串转图片
/// @param base64String 图片base64字符串
- (UIImage *)imageWithBase64String:(NSString *)base64String {
NSURL *URL = [NSURL URLWithString:base64String];
NSData *imageData = [NSData dataWithContentsOfURL:URL];
UIImage *image = [UIImage imageWithData:imageData];
return image;
}
问题分析
H5端将图片转为Base64编码,是利用canvas.toDataURL()函数转换的:
dataURL = canvas.toDataURL('image/png'); //转换图片为dataURL,转换后为Base64格式
所以我们对应的解码也应该先把Base64字符串当做dataURL解码成URL,再转换为图片(解码方案二)。
总结
下次我们需要将Base64编码的图片还原成图片,首先需要弄清之前的图片是怎么转换成Base64的,我们再相应的去解码处理。如果不清楚原始图片的编码过程,我们可以先按照上面的方案一去尝试,如果转换失败,可以再尝试一下方案二,或者再探索探索其他的解决方案。