1.因?yàn)槲覀冃枰獙mage裝成jsonString傳給H5調(diào)用撩幽,我們開(kāi)始的執(zhí)行方法是:
Image -> data -> string -> base64處理
代碼如下:
imageData = UIImageJPEGRepresentation(image,quality);
NSString *ls = [[NSString alloc] initWithData:imageData encoding:NSUTF8StringEncoding];
NSString * json = [ls base64string]
出現(xiàn)錯(cuò)誤情況時(shí):ls總是返回為空库继,網(wǎng)上百度查了發(fā)現(xiàn)大量此類問(wèn)題箩艺,由于imageData含有不能被UTF-8編碼識(shí)別的字符,導(dǎo)致解析失敗宪萄。
同事艺谆,谷歌了一下,找到正確的解決方案:
imageData = UIImageJPEGRepresentation(image,quality);
NSString * imageString = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
imageString = [NSString stringWithFormat:@"data:image/png;base64,%@",imageString];
原理如下:
image -> data -> string -> 添加頭拜英,方便JS調(diào)用
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
這里針對(duì)不識(shí)別的字符或者長(zhǎng)度不夠的情況静汤,進(jìn)行了自動(dòng)填補(bǔ)。
2.我遇到的第二個(gè)錯(cuò)誤:
[imageData writeToFile:imagePath atomically:YES]
這個(gè)方法一直返回失敗
我剛開(kāi)始以為是數(shù)據(jù)為nil造成的
后續(xù)懷疑是data數(shù)據(jù)里有異常數(shù)據(jù)導(dǎo)致的
最后定位到imagePath上:
imagePath 上如果牽扯到文件居凶,請(qǐng)務(wù)必使用nsfilemanager 去創(chuàng)建這個(gè)路徑上文件夾虫给,否則會(huì)很容易導(dǎo)致數(shù)據(jù)寫(xiě)入失敗
參考文章:http://blog.csdn.net/littlesun_zheng/article/details/49943839