UIImage из байтов, хранящихся в NSString

Я пытаюсь создать UIImage из байтового массива, который фактически содержится в NSString.

Подскажите, пожалуйста, как я могу это сделать?

Вот что я задумал сделать:

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 (ноль).

Мы ценим любые предложения.

Спасибо!


person nicktmro    schedule 08.07.2009    source источник


Ответы (3)


Чтобы преобразовать изображение в строку, вам понадобится метод преобразования NSData в строку с кодировкой base64 и обратно (множество примеров здесь). Самыми простыми в использовании являются категории на NSData, поэтому вы можете сделать что-то вроде этого:

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

Чтобы пойти другим путем, вам понадобится обратный преобразователь:

UIImage* image = [UIImage imageWithData:[NSData 
            dataFromBase64EncodedString: pictureDataString]];
person Ramin    schedule 09.07.2009
comment
Спасибо. Вторая часть вашего ответа - это именно то, что мне нужно. - person nicktmro; 09.07.2009
comment
base64Encoding больше не доступен для NSData - person Abdalrahman Shatou; 23.07.2012

[UIImage imageWithData:data]; вернет nil, если он не понимает передаваемые ему данные. Я бы дважды проверил вашу кодировку и т. Д. Странно, что двоичная строка может содержать данные чистого изображения без какой-либо кодировки (base64 и т. Д.). Строковые и двоичные кодировки несовместимы.

person amattn    schedule 08.07.2009

Готов поспорить, в ваших данных изображения есть несколько нулевых символов (0x00), и, как вы знаете, это терминатор для строки, поэтому, когда вы запрашиваете строку C, вы, вероятно, получите слишком мало данных.

Попробуйте что-нибудь вроде - (NSData *) dataUsingEncoding: (NSStringEncoding) encoding; для создания ваших NSData.

Если это не сработает, вам нужно оценить, не вызывает ли установка данных в NSString (со встроенными нулевыми символами) потерю данных.

Как и один из других респондентов, возможно, будет хорошей идеей кодирование ваших данных base-64 (если требуется использование строки для передачи данных img)

Удачи.

person Raymond W    schedule 13.11.2009