2017-02-22 6 views
1

Я использую axios для отправки строки base64 через ajax. Используя нижеприведенный способ, я теряю много данных так или иначе, когда он закодирован из данных base64 обратно в jpg. Как я могу отправить это без потери данных?base64 image to imagecreatefromstring() Потеря данных

Я хватаю файл от входа и отправить его в

var reader = new FileReader(); 
reader.readAsDataURL(file); 

и что 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 nput поле было 19k. Я выводил загруженный base64 на стороне клиента в div для предварительного просмотра, и это изображение сохраняет как 19k jpg, поэтому я предполагаю, что это php-скрипт. Любые идеи о том, что вызывает потерю данных? Может быть, axios config value?

+1

Просто сохраните результаты 'base64_decode ($ mainImage)' в файле непосредственно, как: 'file_put_contents ('./ uploaded.jpg', base64_decode ($ mainImage));'. В настоящее время вы создаете новое изображение Jpeg, которое будет немного сжато при его сохранении. –

+0

@MagnusEriksson Мне нужно держать его на сервере как jpg. Я думаю, что axios отправляет мою строку данных base64, но я не знаю. Моя цель - просто получить jpg на сервере с помощью ajax, поэтому любой способ, который не потерял бы данные, был бы приятным. – Harold

+0

Попробуйте вышеуказанное решение. Случается, что передняя часть отправляет кодированную базу данных бинарного изображения64. Если вы просто декодируете его и сохраните в файл (с расширением '.jpg", как и мой пример), вы получите _exact_ копию загруженного изображения. –

ответ

1

Что происходит, передняя часть отправляет кодированную базу данных бинарного изображения64.

В настоящее время вы декодируете изображение, создавая новое изображение и сохраняя его как jpg. Это просто сжимает изображение снова.

Если вы просто декодируете данные и сохраните их в файле (с .jpg-extension), вы получите точную копию загруженного изображения.

incoming = json_decode(file_get_contents('php://input'))->main; 
$mainImage = str_replace('data:image/jpeg;base64,', '', $incoming); 
file_put_contents('./uploaded.jpg', base64_decode($mainImage));