Отправьте подпись Pad на метод php POST.
Я хочу использовать панель для подписи, чтобы публиковать некоторые данные, это форма для и бэк-энда каждый раз, когда я отправляю, я получаю пустое изображение, нет проблем, я не знаю, это декодирование изображения? или это входное значение??
<form action="" method="POST" id="form-submit" name="myform">
<section>
<div class="container">
<div class="boxarea">
<div class="signature-pad" id="signature-pad">
<div class="m-signature-pad">
<div class="m-signature-pad-body">
<canvas id="myCanvas" width="625" height="318"></canvas>
</div>
</div>
</div>
</div>
</div>
</section>
<input type="hidden" id='image' name="image" value="">
<input type="submit" name="submit" value="submit">
</form>
<script>
var imageData = signaturePad.toDataURL();
document.getElementsByName("image")[0].setAttribute("value", imageData);
</script>
$img = $_POST['image'];
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = './signature-image/' . uniqid() . '.png';
$success = file_put_contents($file, $data);
$image=str_replace('./','',$file);
2 ответа
Похоже, ваш тег скрипта выполняется при загрузке страницы. Вы должны выполнить его прямо перед отправкой формы. Так как вы выполняете его при загрузке страницы, холст в это время будет пустым. Вы должны получить данные изображения с холста и установить его в значение перед отправкой, чтобы данные рисования переносились в значение формы и, в свою очередь, отправлялись на сервер при отправке формы.
Если у вас есть jQuery, вы можете попробовать что-то вроде ниже.
Сначала напишите свой signaturePad внутри функции, подобной этой
function getSignaturePad() {
var imageData = signaturePad.toDataURL();
document.getElementsByName("image")[0].setAttribute("value", imageData);
}
Затем используйте jQuery, чтобы связать форму и вызвать функцию перед отправкой, как показано ниже
$('#form-submit').submit(function() {
getSignaturePad(); // call this function here, sets the imageData right before submitting the form.
return true; // returning true submits the form.
});
Вы не захватываете элемент canvas; toDataURL()
работает на элементе холста, в вашем случае это myCanvas
,
<script>
var canvas = document.getElementById('myCanvas');
var imageData = canvas.toDataURL();
document.getElementsByName("image")[0].setAttribute("value", imageData);
</script>
Источник: toDataURL () doc