2014-03-07 23 views
9

這是我的代碼。將圖像編碼爲base64,得到無效的base64字符串(使用base64EncodedStringWithOptions的ios)

UIImage *img = [UIImage imageNamed:@"white.jpeg"]; 
    NSData *imageData = UIImagePNGRepresentation(img); 
    NSString *imageString = [imageData base64EncodedStringWithOptions:0]; 
    NSLog(@"%@", imageString); 

而且我總是得到包含空間的無效base64字符串。

iVBORw0KGgoAAAANSUhEUgAAARMAAAC3CAIAAAC MS2jAAAAHGlET1QAAAACAAAAAAAAAFwAAAAoAAAAXAAAAFsAAAMC oRdmgAAAs5JREFUeAHs1tFKI1EABFH//5NNVh02uA LQhwoCZ0zj5LbTlffInl58yCAwM8JvPz8iBMIIPDGHJcAgTMEmHOGmjMIMMcdQOAMAeacoeYMAsxxBxA4Q4A5Z6g5gwBz3IGHIPD zfMQL/fVSzDnKyr 9usEvhHn/ddf5N5/yJx7SflcSoA5KV7hz0Lgn0gPW9h3zsNO81wvdr1e/3w R3PmPNf82p4mcLlcDnlu/txCbvKcDqwP s6pCcu/i8Bhzn/yMOcucD705ARe/z43eY5fbQcN5jz5lVB/k4Bfa5u7alUTYE5NWP4mAeZs7qpVTYA5NWH5mwSYs7mrVjUB5tSE5W8SYM7mrlrVBJhTE5a/SYA5m7tqVRNgTk1Y/iYB5mzuqlVNgDk1YfmbBJizuatWNQHm1ITlbxJgzuauWtUEmFMTlr9JgDmbu2pVE2BOTVj JgHmbO6qVU2AOTVh ZsEmLO5q1Y1AebUhOVvEmDO5q5a1QSYUxOWv0mAOZu7alUTYE5NWP4mAeZs7qpVTYA5NWH5mwSYs7mrVjUB5tSE5W8SYM7mrlrVBJhTE5a/SYA5m7tqVRNgTk1Y/iYB5mzuqlVNgDk1YfmbBJizuatWNQHm1ITlbxJgzuauWtUEmFMTlr9JgDmbu2pVE2BOTVj JgHmbO6qVU2AOTVh ZsEmLO5q1Y1AebUhOVvEmDO5q5a1QSYUxOWv0mAOZu7alUTYE5NWP4mAeZs7qpVTYA5NWH5mwSYs7mrVjUB5tSE5W8SYM7mrlrVBJhTE5a/SYA5m7tqVRNgTk1Y/iYB5mzuqlVNgDk1YfmbBJizuatWNQHm1ITlbxJgzuauWtUEmFMTlr9JgDmbu2pVE2BOTVj JgHmbO6qVU2AOTVh ZsEmLO5q1Y1AebUhOVvEmDO5q5a1QSYUxOWv0mAOZu7alUTYE5NWP4mAeZs7qpVTeADAAD//66TqMcAAAIISURBVO3TsQ0AAAjDMP4/GnEDmc3exSKzjgCBv8D8JxYECKxyPAGBIqCcomZDQDl gEARUE5RsyGgHD9AoAgop6jZEFCOHyBQBJRT1GwIKMcPECgCyilqNgSU4wcIFAHlFDUbAsrxAwSKgHKKmg0B5fgBAkVAOUXNhoBy/ACBIqCcomZDQDl gEARUE5RsyGgHD9AoAgop6jZEFCOHyBQBJRT1GwIKMcPECgCyilqNgSU4wcIFAHlFDUbAsrxAwSKgHKKmg0B5fgBAkVAOUXNhoBy/ACBIqCcomZDQDl gEARUE5RsyGgHD9AoAgop6jZEFCOHyBQBJRT1GwIKMcPECgCyilqNgSU4wcIFAHlFDUbAsrxAwSKgHKKmg0B5fgBAkVAOUXNhoBy/ACBIqCcomZDQDl gEARUE5RsyGgHD9AoAgop6jZEFCOHyBQBJRT1GwIKMcPECgCyilqNgSU4wcIFAHlFDUbAsrxAwSKgHKKmg0B5fgBAkVAOUXNhoBy/ACBIqCcomZDQDl gEARUE5RsyGgHD9AoAgop6jZEFCOHyBQBJRT1GwIKMcPECgCyilqNgSU4wcIFAHlFDUbAsrxAwSKgHKKmg0B5fgBAkVAOUXNhoBy/ACBIqCcomZDQDl gEARUE5RsyGgHD9AoAgop6jZEFCOHyBQBJRT1GwIKMcPECgCB/GnRcSfso/fAAAAAElFTkSuQmCC 

很混亂。

當我嘗試刪除base64字符串中的空間並解碼它。

我無法獲取原始圖片。

+0

您的代碼缺少至少一個步驟(imageData從哪裏來?)你能發佈完整的代碼嗎? –

+0

對不起,我錯過了。我編輯過它。 –

回答

16

我想你應該更換你的選擇參數

變化:

NSString *imageString = [imageData base64EncodedStringWithOptions:0]; 

要:

NSString *imageString = [imageData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; 

而且萬一你想它:

- (NSString *)imageToNSString:(UIImage *)image 
{ 
    NSData *data = UIImagePNGRepresentation(image); 

    return [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; 
} 

- (UIImage *)stringToUIImage:(NSString *)string 
{ 
    NSData *data = [[NSData alloc]initWithBase64EncodedString:string options:NSDataBase64DecodingIgnoreUnknownCharacters]; 

    return [UIImage imageWithData:data]; 
} 

請記住,這是一個iOS 7 api。

+0

我試過你的建議。但我仍然有無效的base64字符串 –

+0

嗨,餘,我一直在使用這一段時間,我認爲你的錯誤是在別的地方。你嘗試過使用這些方法嗎? – Logan

+0

如果使用EncodingEndLineWithLineFeed而不是Encoding64CharacterLineLength(Swift),它通常會有所作爲嗎?編碼UIImage到base64字符串是不是很工作,但會嘗試使用EncodingEndLineWithLineFeed – Crashalot

2

邑,我發現問題是我不編碼的網址。

在發佈數據中,我的base64「+」字符被轉換爲「」字符。

所以我得到無效的base64字符串。

感謝洛根。

+2

你能分享我你是如何解決它的? –

1

更換+%2B IOS全部替換+到 「」 空間,使圖像無效

也後端必須處理它太

- (NSString *)base64String:(UIImage*)image {return [[UIImageJPEGRepresentation(image,1) base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed] stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"];} 
0

從法迪Abuzant靈感回答這裏是Swift 3版本

stringBase64 = stringBase64.replacingOccurrences(of: "+", with: "%2B")