来自NSString中保存的字节的UIImage

时间:2009-07-08 23:01:59

标签: iphone objective-c json uiimage nsdata

我正在尝试从一个实际上保存在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(无)。

任何建议都将不胜感激。

谢谢!

3 个答案:

答案 0 :(得分:13)

要将图像转换为字符串,您需要一种方法将NSData转换为base64Encoded字符串并返回(许多示例here)。最容易使用的是NSData上的类别,因此您可以执行以下操作:

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

另一方面,你需要一个反向转换器:

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

答案 1 :(得分:0)

如果

[UIImage imageWithData:data];不理解传递给它的数据,则返回nil。我会仔细检查你的编码等。如果没有某种编码(base64等),二进制字符串将保存纯图像数据,这很奇怪。字符串编码和二进制编码不兼容。

答案 2 :(得分:0)

我敢打赌你的图像数据中有一些空字符(0x00),而且你知道这是字符串的终结符,所以当你要求输入C字符串时,你可能会得到太少的数据。

尝试类似的东西 - (NSData *)dataUsingEncoding:(NSStringEncoding)编码; 生成你的NSData。

如果这不起作用,您需要评估将数据设置为NSString(带有嵌入的空字符)是否也不会导致数据丢失。

与其他受访者一样,对数据进行base-64编码可能是一个好主意(如果使用字符串来传输img数据是必需的)

祝你好运。