NSMutableDictionary를 json'ed로 변환하려고합니다. 내 키 값 중 하나는 그림의 PNG 표현을위한 바이트입니다. NSJSONSerialization
무엇 UIImagePNGRepresenation
반환 NSData
객체 등의 작업을 수행하지 않기 때문에 그래서, 최대JSON 전송을 위해 UIImage를 인코딩하는 방법은 무엇입니까?
NSMutableDictionary *jsonDict = [[NSMutableDictionary alloc] init];
....
if ([self hasPhoto])
{
result[@"photo"] = UIImagePNGRepresentation(self.photo);
}
이 나중에 불면 뭔가를 가지고있다. 데이터를 인코딩하는 좋은 방법은 무엇입니까? 그냥 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;
또한 아래의 Base64 솔루션보다 약 7 배 빠릅니다. 이 특별한 경우에는 그 속도가 AT ALL이 아니었지만 누군가가 물었습니다.
base64와 같은 일종의 이진 -> ascii7 인코딩으로 인코딩해야하거나 양쪽 끝점을 제어 할 수있는 경우 JSON에 연결할 수있는 사진과 같은 항목에 대해 이진 스트림을 허용하는 끝점을 만듭니다 나중에 메타 데이터 봉투. 이 아키텍처는 일반적으로 장기적으로 훨씬 뛰어납니다. –
Base64가 가장 확실한 해결책이 될 것입니다. 그러나 JSON에서 대량의 바이너리 데이터를 전송하는 것은 좋은 생각이 아닙니다. –
+1 새 값 사전 리터럴을 사용하여 값을 설정합니다. – memmons