1.因为我们需要将image装成jsonString传给H5调用,我们开始的执行方法是:
Image -> data -> string -> base64处理
代码如下:
imageData = UIImageJPEGRepresentation(image,quality);
NSString *ls = [[NSString alloc] initWithData:imageData encoding:NSUTF8StringEncoding];
NSString * json = [ls base64string]
出现错误情况时:ls总是返回为空,网上百度查了发现大量此类问题,由于imageData含有不能被UTF-8编码识别的字符,导致解析失败。
同事,谷歌了一下,找到正确的解决方案:
imageData = UIImageJPEGRepresentation(image,quality);
NSString * imageString = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
imageString = [NSString stringWithFormat:@"data:image/png;base64,%@",imageString];
原理如下:
image -> data -> string -> 添加头,方便JS调用
NSDataBase64Encoding64CharacterLineLength 含义是:
// Use zero or one of the following to control the maximum line length after which a line ending is inserted. No line endings are inserted by default
这里针对不识别的字符或者长度不够的情况,进行了自动填补。
2.我遇到的第二个错误:
[imageData writeToFile:imagePath atomically:YES]
这个方法一直返回失败
我刚开始以为是数据为nil造成的
后续怀疑是data数据里有异常数据导致的
最后定位到imagePath上:
imagePath 上如果牵扯到文件,请务必使用nsfilemanager 去创建这个路径上文件夹,否则会很容易导致数据写入失败
参考文章:http://blog.csdn.net/littlesun_zheng/article/details/49943839