Vamos a hacer un dibujo en el canvas de html5 como si fuera un lienzo de Paint y vamos a guardar la imagen en el servidor con PHP.
Lo que haremos sera usar un plugin llamado signature_pad.
El plugin signature_pad esta en el repositorio de Github del creador: https://github.com/szimek/signature_pad
Lo mas importante es el archivo signature_pad.js que contiene una serie de funciones pero nosotros vamos a usar la configuración básica.
Codigo
En un documento HTML debemos incluir lo siguiente:
Primero las librerias que usaremos.
<script src="jquery.min.js"></script> <script src="signature_pad.js"></script>
Después vamos por el componente canvas.
<!-- Contenedor y Elemento Canvas -->
<div id="signature-pad" class="signature-pad" >
<div class="description">Dibujar aqui</div>
<div class="signature-pad--body">
<canvas style="width: 640px; height: 420px; border: 1px black solid; " id="canvas"></canvas>
</div>
</div>
<!-- Formulario que recoge los datos y los enviara al servidor -->
<form id="form" action="./savedraw.php" method="post">
<input type="hidden" name="pacient_id" value="<?php echo $user->id; ?>">
<input type="hidden" name="base64" value="" id="base64">
<button id="saveandfinish" class="btn btn-success">Guardar y Finalizar</button>
</form>Lo siguiente es el script para iniciar el plugin signature_pad.
También se crea una función resizeCanvas que se usa cuando se inicia el canvas y cuando las dimensiones de la ventana cambian.
var wrapper = document.getElementById("signature-pad");
var canvas = wrapper.querySelector("canvas");
var signaturePad = new SignaturePad(canvas, {
backgroundColor: 'rgb(255, 255, 255)'
});
function resizeCanvas() {
var ratio = Math.max(window.devicePixelRatio || 1, 1);
canvas.width = canvas.offsetWidth * ratio;
canvas.height = canvas.offsetHeight * ratio;
canvas.getContext("2d").scale(ratio, ratio);
signaturePad.clear();
}
window.onresize = resizeCanvas;
resizeCanvas();Ahora seguimos con el script que va a enviar los datos del dibujo por POST para que sea posible guardar en el servidor.
document.getElementById('form').addEventListener("submit",function(e){
var ctx = document.getElementById("canvas");
var image = ctx.toDataURL(); // data:image/png....
document.getElementById('base64').value = image;
},false);Por ultimo pero no menos importante, el script PHP (savedraw.php) que recibe los datos y los guarda en una imagen.
//print_r($_POST);
$img = $_POST['base64'];
$img = str_replace('data:image/png;base64,', '', $img);
$fileData = base64_decode($img);
$fileName = uniqid().'.png';
file_put_contents($fileName, $fileData);
header("Location: ./index.html");Resultado
El resultado seria el siguiente:

Descargar
A continuación les dejo la descarga del código del ejemplo utilizado. Incluye: Archivos html, js , php e imágenes.
Link: https://drive.google.com/file/d/1KStCz9VNT1ikaKjKGMagUeyRryrFRu94/view
Conclusion
Esta función para dibujar y guardar imágenes tiene muchas aplicaciones, recientemente la utilice para crear un formulario donde el usuario tiene que agregar su firma y esta firma se guarda como imagen en el servidor y después se muestra en un documento PDF.
Y bueno cualquier otro uso que ustedes le quieran dar.
Excelente aportacion, sencicllo y claro, felicidades
Excelente aporte