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的,我们再相应的去解码处理。如果不清楚原始图片的编码过程,我们可以先按照上面的方案一去尝试,如果转换失败,可以再尝试一下方案二,或者再探索探索其他的解决方案。

附:图片的Base64编码解码工具

站长工具-图片Base64编解码

上一篇下一篇

猜你喜欢

热点阅读