2017-06-10 90 views
0

我一直試圖在過去兩天使用不同的方法將base64字符串轉換爲圖像文件,但每次輸出文件不顯示圖像(它顯示大小和一些編碼數據)。將Base64圖像轉換爲文件返回無效圖像/數據

說明: 1.瀏覽器將文件解釋爲文件而不是圖像MIME,但我敢肯定,這不是問題,因爲我試圖下載文件localy,它是相同的結果。 2.我嘗試將在線工具的輸出結果作爲codebeautify.org/base64-to-image-converter進行比較,因爲看起來圖像文件中的數據與我的數據不同。 3.目錄和文件有775組的權限和Apache有CHOWN

Base64編碼字符串在這裏:https://dpaste.de/gP7D/raw

方法A:

list($type, $profile_image) = explode(';', $profile_image); 
       list(,$extension) = explode('/',$type); 
       list(,$profile_image)  = explode(',', $profile_image); 
       if($extension == 'jpeg'){$extension = "jpg";} 
       $filePath = '../uploads/profile_images/'.$uname.'.'.$extension; // using uname instead of unique id to not expose the uqniue key/session 
       $profile_image = base64_decode($profile_image); 
       file_put_contents($filePath, $profile_image); 

方法B:

list($type, $profile_image) = explode(';', $profile_image); 
       list(,$extension) = explode('/',$type); 
       list(,$profile_image)  = explode(',', $profile_image); 
       $filePath = '../uploads/profile_images/'.$uname.'.'.$extension; 
       $ifp = fopen($filePath, 'wb'); 
       fwrite($ifp, base64_decode($profile_image)); 
       fclose($ifp); 

我是什麼做錯了?

更新: 顯然,Apache/php.ini的最大max_input_vars是5000,而我的base64字符串要高得多。這篇文章可以被標記爲已解決。

+0

如果上述文章中顯示的方法不適合我並在此線程中聲明,它是如何重複的? – mele

+0

你是對的。你可以分享其他代碼的要點嗎? –

+0

其獨立功能。 $ profile_image存儲base64字符串 – mele

回答

1

的Apache/php.ini文件中有5000最大max_input_vars,而我的base64字符串要高得多。

1

似乎必須刪除base64編碼字符串的開頭,這不是base64編碼數據的一部分。 從base64字符串中刪除"data:image/jpeg;base64"

我做了一些簡單的測試,並得到了圖像...

+0

由於上面的代碼顯示我使用「爆炸」來刪除「data:image/jpeg; base64」... – mele

+0

「base64」後的逗號符號用於填充而不是字符串的一部分 – mele

+0

建議你寫一些簡單的代碼來調試... '<?php $ string =「[your encoded string]」; file_put_contents(「test.jpg」,base64_decode($ string));' 然後檢查你是否有可查看的文件...我用你的base64字符串做了它,並得到一個工作的JPEG。 – Yedidia