UIImage из байтов, хранящихся в NSString
-
11-09-2019 - |
Вопрос
Я пытаюсь создать 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 (ноль).
Мы ценим любые предложения.
Спасибо!
Решение
Чтобы преобразовать изображение в строку, вам нужен метод преобразования NSData
в строку в кодировке base64 и обратно (множество примеров здесь).Самыми простыми в использовании являются категории на NSData
поэтому вы можете сделать что-то вроде этого:
UIImage* pic = [UIImage imageNamed:@"sample.png"];
NSData* pictureData = UIImagePNGRepresentation(pic);
NSString* pictureDataString = [pictureData base64Encoding];
Чтобы пойти другим путем, вам понадобится обратный преобразователь:
UIImage* image = [UIImage imageWithData:[NSData
dataFromBase64EncodedString: pictureDataString]];
Другие советы
[UIImage imageWithData:data];
вернет ноль, если он не понимает передаваемые ему данные.Я бы дважды проверил вашу кодировку и т. д.Странно, что двоичная строка может содержать чистые данные изображения без какой-либо кодировки (base64 и т. д.).Строковые и двоичные кодировки несовместимы.
Могу поспорить, что в данных вашего изображения есть несколько нулевых символов (0x00), и, как вы знаете, это признак конца строки, поэтому, когда вы запрашиваете строку C, вы, вероятно, получаете слишком мало данных.
Попробуйте что-то вроде - (NSData *)dataUsingEncoding:(NSStringEncoding)кодировка;для создания ваших NSData.
Если это не сработает, вам нужно оценить, не приводит ли установка данных в NSString (со встроенными нулевыми символами) к потере данных.
Как и один из других респондентов, возможно, кодирование ваших данных в формате Base64 было бы хорошей идеей (если использование строки для транспортировки данных img является обязательным требованием)
Удачи.