2012-03-23 31 views
0

我想base64编码的图像上传在iOS上,但愚蠢的东西没有内置的支持,所以我下载了两个库,并尝试它们都出来,但我认为他们正在返回错误的值(除非我比我想象的更了解base64)。 This网站返回一个长字符串,以此开头:/9j/4Q+zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhgAAAA8BAgAFAAAApgAAABABAgAKAA 当我使用library进行加密时,我下载了它,它以此开始:iVBORw0KGgoAAAANSUhEUgAAAI0AAABnCAIAAACy41YWAABAAElEQVR4AbzdeaylyXUY9nf3 我100%确定第一个是正确的,因为当我使用写入的测试程序测试服务器,这是它上传到服务器的相同代码,并且服务器愉快地解码文件并保存图像。 Here是测试图像。iPhone中的Base64返回与其他工具不同的结果

基本上,我在想的是,我需要为iPhone/iPad获得不同的库。我注意到的另一件奇怪的事情是,对于某些图像,=会位于字符串的末尾,对于其他位置则不会。我可以为此想到三个理由。

1)iPhone内存不足,不想告诉我,所以它只是上传它的内容。

2)库被打破

3)我很困惑,不明白的base64

有什么建议?

编辑:iPhone实际上是模拟器,所以我不知道它是否会耗尽计算机的内存。我知道android模拟器没有,但我不确定iOS模拟器。

+0

你的意思是编码,而不是加密。 – 2012-03-24 02:58:17

回答

5

根据标准base64解码(例如this one),iPhone输出似乎映射到PNG的开头。您提供的其他选项(我将其修剪为'/ 9j/4Q + zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhgAAAA8BAgAFAAAApgAAABABAgAK'为有效的base64长度)以FFD8开头,即JPEG SOI标记,然后包含文本Exif,因此我愿意说它是JPEG。

您可能无意中编码了不同的文件进行比较吗?

哦,快速提示,如果它可以帮助你测试你的工作 - iPhone有base 64解码内置,但不明显。诀窍是创建一个base 64编码的数据url,并要求NSData加载它。例如。

NSData *decodedData = [NSData dataWithContentsOfURL: 
    [NSURL URLWithString: 
     @"data:;base64,/9j/4Q+zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhgAAAA8BAgAFAAAApgAAABABAgAK"]]; 

data:;base64,之后是您的base64数据。


附录,三年后:由于iOS的7 NSData已经直接提供-initWithBase64EncodedString:options:所以没有必要制定一个数据URL了。

+0

谢谢,我从来没有想到这一点。即使它是JPEG图像,我仍然将数据作为PNG表示。我转而将其作为一个JPEG文件,现在它工作得很好 – nick 2012-03-26 15:36:36

相关问题