我遇到了将NSString转换为UIImage的问题。 EDIT1: 我正在从gtalk服务器下载照片作为字符串并解析xml 5896efb83a92deaee41a30648cc9dbf7e9942b0e以用作图像。
NSString *myPicture = [presence photo]; NSData *pic = nil; if (![myPicture isEqualToString:@""]) { pic = [myPicture dataUsingEncoding:NSUTF8StringEncoding]; } UIImage *picture; NSLog(@"Photo %@", pic); if (pic == nil) { picture = [UIImage imageWithData:[Utils getAvatar]]; } else { picture = [UIImage imageWithData:pic]; } NSLog(@"Picture %@", picture);
日志
Photo 35383936 65666238 33613932 64656165 65343161 33303634 38636339 64626637 65393934 32623065 Picture (null)
picture = [UIImage imageWithData:[Utils getAvatar]]的部分可以正常工作
有什么想法吗?
答案 0 :(得分:1)
从问题中我不清楚你要做的是什么。
将图片存储为字符串没有标准惯例,因此您需要解释[在线照片]返回的格式。
例如,如果字符串包含图像的文件名,则这是完全错误的方法,您应该使用initWithContentsOfFile加载图像。如果它包含base-64编码的URL,则需要使用Base64解码算法将其解码为数据。
如果字符串只是原始二进制图像数据,那么这是一个非常奇怪的事情,因为NSString不是用于存储原始二进制数据,可能不能以这种方式使用,但如果它是你正在做的那么数据最有可能需要使用UTF16而不是UTF8进行转换,因为这是NSStrings的自然内部编码。
编辑:从你的后续编辑来看,你的字符串看起来是十六进制编码的,所以你需要使用十六进制解码器将其转换为数据。关于如何在这里做到这一点有一个答案:Convert hex data string to NSData in Objective C (cocoa)
之后,您可能仍需要进行进一步处理,具体取决于数据的格式(例如PNG与JPEG),但请尝试将解码后的数据传递给intWithData并查看如何继续处理。
答案 1 :(得分:0)
希望对你有所帮助。
picture = [[UIImage alloc] initWithData:pic];