美文网首页
iOS Base64图片解码为空解决方案

iOS Base64图片解码为空解决方案

作者: MeaningfulLiu | 来源:发表于2020-10-28 17:30 被阅读0次

    问题描述

    我们在将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编解码

    相关文章

      网友评论

          本文标题:iOS Base64图片解码为空解决方案

          本文链接:https://www.haomeiwen.com/subject/rjxfpxtx.html