2009-07-08 5 views
4

실제로 NSString 내에서 유지되는 바이트 배열에서 UIImage를 만들려고합니다.NSString에서 보유한 바이트의 UIImage

누군가 내가 그 일을 어떻게 할 수 있는지 말해 줄 수 있습니까? 여기

내가 일을 생각하고 무엇을 :

NSString *sourceString = @"mYActualBytesAREinHERe="; 
//get the bytes 
const char *bytesArray = [sourceString cStringUsingEncoding:NSASCIIStringEncoding]; 
//build the NSData object 
NSData *data = [NSData dataWithBytes:bytesArray length:[sourceString length]]; 
//create actual image 
UIImage *image = [UIImage imageWithData:data]; 

문제는 이미지 항상 0x0으로 (전무)입니다.

의견을 보내 주시면 감사하겠습니다.

감사합니다.

답변

13

이미지를 문자열로 변환하려면 NSData을 base64 인코딩 된 문자열로 변환 한 다음 (많은 예제가 here) 변환해야합니다.

UIImage* image = [UIImage imageWithData:[NSData 
      dataFromBase64EncodedString: pictureDataString]]; 
+0

감사합니다. 대답의 두 번째 부분은 내가 따라 간 것입니다. – nicktmro

+0

NS64에 대해 base64Encoding 메서드를 더 이상 사용할 수 없습니다. –

0

[UIImage imageWithData:data];은 전달 된 데이터를 이해하지 못하면 nil을 반환합니다. 난 당신의 인코딩 등을 확인하는 것입니다 그것은 이진 문자열이 일종의 인코딩 (base64 등)없이 순수한 이미지 데이터를 보유한다는 것이 이상합니다. 문자열 인코딩 및 이진 인코딩은 호환되지 않습니다.

0

나는 당신의 이미지 데이터를 내기가 일부 널 (null)이 있습니다

UIImage* pic = [UIImage imageNamed:@"sample.png"]; 
NSData* pictureData = UIImagePNGRepresentation(pic); 
NSString* pictureDataString = [pictureData base64Encoding]; 

당신이 역 컨버터를 필요로하는 다른 방법을 이동하려면 : 가장 쉬운 사람은 그래서 당신이 뭔가를 할 수 NSData에있는 범주를 사용하는 거기에있는 문자 (0x00)와 문자열의 종결자인 것을 알고 있듯이 C 문자열을 물어 보면 너무 길어질 것입니다.

같은 것을 시도하십시오 - (NSData *) dataUsingEncoding : (NSStringEncoding) encoding; 을 사용하여 NSData를 생성하십시오.

그래도 작동하지 않으면 NSString (null 문자 포함)으로 데이터를 설정해도 데이터 손실이 발생하지 않는지 평가해야합니다.

행운을 빌어 요합니다 (IMG의 데이터를 전송하기 위해 요구 사항을 문자열이다 사용하는 경우) 다른 응답자 중 하나처럼

, 아마도베이스 (64)는 데이터를 암호화하는 것은 좋은 생각이 될 것입니다.