NSData/UIImage 到字符串
Posted
技术标签:
【中文标题】NSData/UIImage 到字符串【英文标题】:NSData/UIImage to String 【发布时间】:2013-02-10 16:31:37 【问题描述】:是否可以将 NSData/UIImage 数据表示作为 JPEG 转换为字符串,通过 HTTP 发送到 php 文件以将此字符串保存在数据库中,然后稍后在应用程序中检索它并将其转换回一个 NSData/UIImage 对象?
我尝试过 Base64 编码库,但由于图像无法在 html 页面上正确显示,因此 base64 似乎无效。
有什么建议吗?
编辑。
我正在使用以下库:
http://www.imthi.com/blog/programming/iphone-sdk-base64-encode-decode.php
并按以下方式转换:
NSData *imageData = UIImageJPEGRepresentation(MyImage.image, 90);
[Base64 initialize];
NSData *encoded = [Base64 encode:imageData];
NSLog(@"%@",encoded);
这确实会大量使用 BASE64,但是当我将其保存到文件并尝试查看它时,我只是在 Chrome 中加载图像 [?] 时出错。
谢谢
【问题讨论】:
Base64 工作正常。事实上,当你做内联 HTML 图像时,它使用 Base64。你的尝试一定有问题。再试一次,如果你没有成功,用你的代码更新你的问题,我们会看看。 更新了上面的帖子 附带说明:不要将 img 数据存储为字符串。 b64 适合传输,但不利于存储 “编码”指针引用的对象应该是NSString,而不是NSData。 直接将图像转换为 NSData。我们可以像我回答的那样使用。 【参考方案1】:将NSData
对象编码为base 64 的目的是,您可以将数据表示为可以更轻松地存储或传输的字符串。然后,您需要将 base 64 编码字符串解码回NSData
。然后可以使用此数据创建一个新的UIImage
。您的服务器需要执行此解码才能取回原始数据。
您的代码有错误。这一行:
NSData *encoded = [Base64 encode:imageData];
应该是:
NSString *encoded = [Base64 encode:imageData];
请注意,您返回的是字符串,而不是数据。
您评论说您将编码字符串写入文件然后无法查看图像。当然不是。如果要将图像数据写入文件以便文件实际上可以作为图像查看,则不要先对数据进行编码。将原始图像数据写入文件。
【讨论】:
【参考方案2】:您可以像这样将图像转换为字符串 首先将您的 UIImage 转换为 NSData,然后使用 encodeBase64WithData 将该 ata 转换为字符串
NSString *imageOne = [self encodeBase64WithData:[imageDict objectForKey:@"ImageOne"]];
然后像这样再次字符串到 UIImage:
[UIImage imageWithData: [self decodeBase64WithString:[registerDataDict objectForKey:@"imageOne"]]];
【讨论】:
它包含 NSData ,它是在将 UIImage 转换为 NSData 之后得到的 我试图暗示这一点,但我得到错误“'NSData' 没有可见的@interface 声明选择器'objectForKey' 暗示:NSData *imageData = UIImageJPEGRepresentation(MyImage.image, 90); NSString *imageOne = [self encodeBase64WithData:[imageData objectForKey:@"ImageOne"]];【参考方案3】:你需要导入 Base64.h
你可以这样直接使用:
UIImage *image = _btnaddCountryIcon.imageView.image;
NSData *imageData = UIImagePNGRepresentation(image);
NSString *base64 = [Base64 encode:imageData];
你可以直接转换成NSString。这段代码对我来说很好用。
【讨论】:
这不能回答问题。 OP 已经声明他们已经获得了编码的字符串。您所做的只是重新发布相同的代码。 我正在使用这个东西来上传图片。这是常见的东西。 这不是重点。您的“答案”没有回答问题。 OP 已经知道如何从图像数据中获取 base 64 字符串。 因为我理解的是他无法将数据加载到字符串中,所以我给出了转换。 如果您阅读了这个问题,很明显他不知道如何处理 base 64 字符串。问题在于得到答案中显示的结果后该怎么做。以上是关于NSData/UIImage 到字符串的主要内容,如果未能解决你的问题,请参考以下文章
Delphi TMemoryStream写入到字符串和字符串写入到流