Я использую 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?
Просто сохраните результаты 'base64_decode ($ mainImage)' в файле непосредственно, как: 'file_put_contents ('./ uploaded.jpg', base64_decode ($ mainImage));'. В настоящее время вы создаете новое изображение Jpeg, которое будет немного сжато при его сохранении. –
@MagnusEriksson Мне нужно держать его на сервере как jpg. Я думаю, что axios отправляет мою строку данных base64, но я не знаю. Моя цель - просто получить jpg на сервере с помощью ajax, поэтому любой способ, который не потерял бы данные, был бы приятным. – Harold
Попробуйте вышеуказанное решение. Случается, что передняя часть отправляет кодированную базу данных бинарного изображения64. Если вы просто декодируете его и сохраните в файл (с расширением '.jpg", как и мой пример), вы получите _exact_ копию загруженного изображения. –