2012-05-02 66 views
3

所以我能夠成功地讀取圖像文件,並將其傳遞迴我的C#應用​​程序,但我不能給它適當地解碼基於圖像解讀C#基地64。從通過JSON/PHP(BASE64_ENCODE)

我通過PHP返回JSON數據本身(未示出json_encode函數):

 $imgbinary = fread(fopen($filename, "r"), filesize($filename)); 

     if (strlen($imgbinary) > 0){ 
      return array("success"=>true, "map"=>base64_encode($imgbinary)); 
     } 

然後在C#我使用Newtonsoft.Json到串進行解碼(I可以讀取成功和成功的地圖屬性),但我無法再使用的base64解碼的圖像正常寫入一個文件(或顯示)。

我做它是這樣:

File.WriteAllText(System.Windows.Forms.Application.StartupPath + "\\MyDir\\" + FileName, Base64Decode(FileData)); 

    public string Base64Decode(string data) 
    { 
     byte[] binary = Convert.FromBase64String(data); 
     return Encoding.Default.GetString(binary); 
    } 

我在這裏失去了一些東西瘋狂簡單嗎?真正奇怪的是,在解碼數據後,文件大小比原始文件大。 (我認識到,一旦你編碼,數據增加了大約33%,奇怪的是,我解碼後,它仍然更大)。

任何幫助/指針將不勝感激!

+0

您是否獲得一個例外? – xxpor

+0

不要將它作爲TEXT文件寫入,而是通過將字節數組直接保存到文件中(不要執行Encoding.Default.GetString) – Quintium

回答

9

我失去了一些瘋狂簡單嗎?

是的。圖像不是一個文本文件,所以你不應該使用File.WriteAllText。你相信什麼字符出現在一個圖像文件?區分數據何時基本上是文本,什麼時候基本是二進制,真的非常重要。如果你試圖把它看作是另一個,那麼你就是在尋求麻煩。

不要從字節數組轉換爲文本(您Encoding.Default.GetString的通話將被丟失數據) - 只需使用:

File.WriteAllBytes(path, Convert.FromBase64String(data)); 
+0

可能的錯字:「應該使用File.WriteAllText」。我認爲你的意思是「不應該」:) – Quintium

+0

@Quintium:固定謝謝。現在顯然是睡覺的時候了。 –