我正在尝试建立一个 NSMutableDictionary 以转换为 json'ed。我的键值之一是图片的 png 表示的字节。所以我有类似的东西
NSMutableDictionary *jsonDict = [[NSMutableDictionary alloc] init];
....
if ([self hasPhoto])
{
result[@"photo"] = UIImagePNGRepresentation(self.photo);
}
这后来爆炸了,因为NSJSONSerialization
不做像返回NSData
的对象之类的事情UIImagePNGRepresenation
。什么是编码数据的好方法?只是 UTF8'ing 可能会很糟糕。我对 json 中的合法字符串表示的内容不太熟悉。
更新:
我最终找到了这个关于使用 Apple 内置但未宣传的功能的链接。代码更长,但我少了 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;
这也比下面的 Base64 解决方案快约 7 倍。在这种特殊情况下,速度并不重要,但有人问。