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 到字符串的主要内容,如果未能解决你的问题,请参考以下文章

Java多维数组到字符串和字符串到数组

字符串到 int 再到字符串 C++

Delphi TMemoryStream写入到字符串和字符串写入到流

请教下,怎么查到数组中,某个字符串,在数组中的索引位置?

快速多部分/表单数据上传,将字符串数组附加到正文(问题:数组作为字符串到服务器)

字符串到十六进制-十六进制到字符串转换