2012-03-23 58 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

相關問題