1
我使用axios通過ajax發送一個base64字符串。使用下面的方式,當它從base64數據編碼回jpg時,我會以某種方式丟失大量數據。我怎樣才能發送這個沒有數據丟失?base64圖像imagecreatefromstring()丟失數據
我從輸入抓取文件並將其發送到
var reader = new FileReader();
reader.readAsDataURL(file);
和PHP腳本接收後爲BASE64字符串被作爲Ajax和愛可信爲
axios.post('url', {main: img})
:
$incoming = json_decode(file_get_contents('php://input'))->main;
$mainImage = str_replace('data:image/jpeg;base64,', '', $incoming);
$img = imagecreatefromstring(base64_decode($mainImage));
$imageSave = imagejpeg($img, './uploaded.jpg');
例如,保存在服務器上的最近文件只有14k,但是我上傳到i的原始文件輸入字段爲19k。我將客戶端上傳的base64輸出到預覽div,並且該圖像保存爲19k jpg,因此我認爲它是php腳本。關於什麼導致數據丟失的任何想法?也許一些axios config value?
就直接保存BASE64_DECODE($ mainImage)的'結果'的文件,如:'file_put_contents( './ uploaded.jpg',BASE64_DECODE($ mainImage));'。目前,您正在創建一個新的Jpeg圖像,在保存時會稍微壓縮一些。 –
@MagnusEriksson我必須將它作爲jpg保存在服務器上。我猜axios正在發送我的一串base64數據,但我不知道。我的目標是使用ajax在服務器上獲取一個jpg,所以任何不會丟失數據的方式都會很好。 – Harold
嘗試上述解決方案。發生的是,前端正在發送編碼的二進制圖像數據base64。如果你只是將它解碼並保存到一個文件中(用'.jpg'-擴展名,就像我的例子),你將得到一個上傳圖像的_exact_副本。 –