【问题标题】:UIImage from bytes held in NSStringUIImage 来自 NSString 中保存的字节
【发布时间】:2010-11-09 05:11:58
【问题描述】:

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

任何建议将不胜感激。

谢谢!

【问题讨论】:

    标签: iphone objective-c json uiimage nsdata


    【解决方案1】:

    要将图像转换为字符串,您需要一种将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]];
    

    【讨论】:

    • 谢谢。你回答的第二部分正是我所追求的。
    • base64Encoding 不再适用于 NSData
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我敢打赌,您的图像数据中有一些空字符 (0x00),并且您知道这是字符串的终止符,因此当您要求 C 字符串时,您可能得到的数据太少了。

      尝试类似 - (NSData *)dataUsingEncoding:(NSStringEncoding)encoding; 生成您的 NSData。

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

      和其他一位受访者一样,也许 base-64 编码您的数据是个好主意(如果需要使用字符串来传输 img 数据)

      祝你好运。

      【讨论】:

        猜你喜欢
        • 2013-08-19
        • 1970-01-01
        • 2012-04-27
        • 2012-10-16
        • 2017-10-06
        • 2011-10-13
        • 1970-01-01
        • 1970-01-01
        • 2011-01-16
        相关资源
        最近更新 更多