我想建立一個NSMutableDictionary被轉換爲json'ed。我的一個鍵值是圖片的png表示的字節數。所以,我有類似如何爲JSON傳輸編碼UIImage?
NSMutableDictionary *jsonDict = [[NSMutableDictionary alloc] init];
....
if ([self hasPhoto])
{
result[@"photo"] = UIImagePNGRepresentation(self.photo);
}
這以後的打擊了,因爲NSJSONSerialization
不會做這樣的事情NSData
對象是什麼UIImagePNGRepresenation
回報。什麼是編碼數據的好方法?只是UTF8'ing可能會很糟糕。我並不熟悉json中合法字符串表示的內容。
更新:
我最終找到this link關於使用蘋果的內置但是未公開功能。代碼較長,但我是2個文件少:
NSData *data = UIImageJPEGRepresentation(self.photo, 0.5);
NSString *base64 = nil;
NSUInteger sourceLength = data.length;
NSUInteger encodeBufferLength = ((sourceLength + 2)/3) * 4 + 1;
char *encodeBuffer = malloc(encodeBufferLength);
int encodedRealLength = b64_ntop(data.bytes, sourceLength, encodeBuffer, encodeBufferLength);
if (encodedRealLength >= 0)
{
base64 = [[NSString alloc] initWithBytesNoCopy: encodeBuffer length: encodedRealLength + 1 encoding: NSASCIIStringEncoding freeWhenDone: YES];
}
else
{
free(encodeBuffer);
}
result[@"photo-jpeg"] = base64;
這也運行約7X除了下面的Base64編碼解決方案快。在這個特殊情況下,並非所有速度都重要,但有人問。
您需要將其編碼爲像base64這樣的binary-> ascii7編碼,或者如果您對兩個端點都有一定的控制權,則可以爲端點接受二進制流,以處理諸如可以將它們關聯到JSON的照片元數據信封。從長遠來看,這種架構通常要好得多。 –
Base64將是最明顯的解決方案。但是用JSON傳輸大量的二進制數據可能不是一個好主意。 –
+1使用新的字典文字設置您的價值。 – memmons