做网页前端的同学有时为了减少 Http 的请求数量,经常会把一些需要重复使用并且比较小的图片根据 Data URI 协议,经 base64 编码成字符串格式来储存。
背景知识
Data URI
的语法是这样的:
1
|
|
这里的 mediatype 是一个 MIME
类型的字符串,比如 image/png
表示 png 格式的图片文件。缺省时其默认值为 text/plain;charset=US-ASCII
。当要表示的 data 不是文本时,比如图片、音频、视频文件等,需要对其进行 base64 编码。
举个栗子,用 Data URI 表示一张图片时,大概是这个样子 (这里的 ...
为省略的字符) :
1
|
|
根据 base64 编码的原理,当看到一堆连续的字符后边跟一或两个 =
时,基本可以确定这是一个经过 base64 编码后得到的字符串。
在 html 中,像下边这样就可以将该图片显示出来了:
1
|
|
解决方案一
这里的 Data URI 也可视为是 URL,因此可将其转换为 NSURL
,然后将其转换为 NSData
,最后将其读出为 UIImage
:
1 2 3 4 5 |
|
此处注意:上述参数 dataURIStr
必须有协议前缀 data:image/png;base64,
,否则就不是一个标准的 Data URI 了,得到的 imgURL
将会为 nil。
解决方案二
如果去掉上述协议前缀,剩下的字符串就是一个经 base64 编码后的图片信息,此时可用 iOS7 之后 NSData
新增加的方法 initWithBase64EncodedString: options:
来搞定。它可将 base64 编码的字符串直接转换为 NSData
:
1 2 3 4 |
|