我正在尝试base64编码图像以便在iOS上传,但是愚蠢的东西没有内置支持,所以我下载了两个库并尝试了它们,但我认为它们返回了错误的值(除非我理解base64甚至比我想的还要少。) This网站返回一个以此开头的长字符串:/9j/4Q+zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhgAAAA8BAgAFAAAApgAAABABAgAKAA
当我使用我下载的library进行加密时,它从以下内容开始:iVBORw0KGgoAAAANSUhEUgAAAI0AAABnCAIAAACy41YWAABAAElEQVR4AbzdeaylyXUY9nf3
我100%确定第一个是正确的,因为当我使用编写的测试程序来测试服务器时,它与上传到服务器的代码相同,服务器会愉快地解码文件并保存图像。 Here是测试图像。
基本上,我在想的是我需要为iPhone / iPad建立一个不同的库。我注意到的另一个奇怪的事情是,对于某些图像,=将位于字符串的末尾,而对于其他图像则不会。我可以为此考虑三个原因。
1)iPhone内存不足,不想告诉我它只是上传了它的内容。
2)图书馆坏了
3)我很困惑,不理解base64
有什么建议吗?
编辑:iPhone实际上是模拟器,所以我不知道它是否会在计算机之前用完内存。我知道android模拟器没有,但我不确定iOS模拟器。
答案 0 :(得分:5)
iPhone输出似乎按照标准base64解码(例如this one)映射到PNG的开头。您提供的另一个选项(我将其修剪为'/ 9j / 4Q + zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhAAAAA8BAgAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
您是否有可能无意中编码了不同的文件进行比较?
哦,顺便提一下,如果它可以帮助你测试你的工作 - iPhone内置64位解码,但不是很明显。诀窍是创建一个基于64编码的数据URL,并要求NSData
加载它。 E.g。
NSData *decodedData = [NSData dataWithContentsOfURL:
[NSURL URLWithString:
@"data:;base64,/9j/4Q+zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhgAAAA8BAgAFAAAApgAAABABAgAK"]];
data:;base64,
后面直接跟随您的base64数据。
附录,三年后:由于iOS 7 NSData
已直接提供-initWithBase64EncodedString:options:
,因此无需再制定数据网址。