Signature_pad: Guardar imagen en el archivo del servidor

Creado en 27 jun. 2016  ·  11Comentarios  ·  Fuente: szimek/signature_pad

Hola, estoy tratando de guardar la firma como una imagen png en un archivo de servidor, pero no sé cómo puedo hacerlo (estoy usando php y javascript en mi aplicación).

¡Gracias!

Comentario más útil

Hola @stupendomen

Hago un nuevo archivo .php (signature_pad.php) con el código anterior y lo llamo con la función ajax en el archivo que contiene el panel de firma (cuando presiona el botón Guardar).
Algo como esto:

`
var envoltorio = document.getElementById("firma-pad"),
clearButton = wrapper.querySelector("[acción-datos=borrar]"),
saveButton = wrapper.querySelector("[acción-datos=guardar]"),
lienzo = envoltura.querySelector("lienzo"),
pad de firma;

// Adjust canvas coordinate space taking into account pixel ratio,
// to make it look crisp on mobile devices.
// This also causes canvas to be cleared.
    function resizeCanvas() {
        // When zoomed out to less than 100%, for some very strange reason,
        // some browsers report devicePixelRatio as less than 1
         // and only part of the canvas is cleared then.
        var ratio =  Math.max(window.devicePixelRatio || 1, 1);
        canvas.width = canvas.offsetWidth * ratio;
        canvas.height = canvas.offsetHeight * ratio;
        canvas.getContext("2d").scale(ratio, ratio);
    }
    window.onresize = resizeCanvas;
    resizeCanvas();
    signaturePad = new SignaturePad(canvas);

    clearButton.addEventListener("click", function (event) {
         signaturePad.clear();
    });

    saveButton.addEventListener("click", function (event) {
        event.preventDefault();
        var nombre_receptor_form = $("#nombre_receptor_form").val();
        var id_nombre_imagen = $("#id_nombre_imagen").val();

        if ( signaturePad.isEmpty() ) {
            alert("Please insert signature.");
        } else {
            var dataUrl = signaturePad.toDataURL();
            document.getElementById('imagen_firma').src = dataUrl;
            var imagen = dataUrl.replace(/^data:image\/(png|jpg);base64,/, "");
                $.ajax({
                    url: './includes/signature_pad.php',
                    type: 'POST',
                    data: {
                        imageData: imagen
                    },
                })
                .done(function(msg) {
                    // Image saved successfuly.
                    console.log("success: " + msg);
                    document.getElementById("my_form").submit(); //I do this to save other information.
                })
                .fail(function(msg) {
                    console.log("error: " + msg);
                });

`

¡Deseo que esto te sea útil!

Todos 11 comentarios

Resuelto con este código:

if (isset($_POST['imageData'])) {
    $imgData = base64_decode($_POST['imageData']);
    $image_name= $_POST['image_name'];

    // Path where the image is going to be saved
    $filePath = '../img/'.$image_name.'.jpg';

    // Delete previously uploaded image
    if (file_exists($filePath)) { unlink($filePath); }

    // Write $imgData into the image file
    $file = fopen($filePath, 'w');
    fwrite($file, $imgData);
    fclose($file);
} else {
    echo "imgData doesn't exists";
}

Hola,
Tengo el mismo problema, pero ¿dónde debería agregarse su código?

¡Gracias!

Hola @stupendomen

Hago un nuevo archivo .php (signature_pad.php) con el código anterior y lo llamo con la función ajax en el archivo que contiene el panel de firma (cuando presiona el botón Guardar).
Algo como esto:

`
var envoltorio = document.getElementById("firma-pad"),
clearButton = wrapper.querySelector("[acción-datos=borrar]"),
saveButton = wrapper.querySelector("[acción-datos=guardar]"),
lienzo = envoltura.querySelector("lienzo"),
pad de firma;

// Adjust canvas coordinate space taking into account pixel ratio,
// to make it look crisp on mobile devices.
// This also causes canvas to be cleared.
    function resizeCanvas() {
        // When zoomed out to less than 100%, for some very strange reason,
        // some browsers report devicePixelRatio as less than 1
         // and only part of the canvas is cleared then.
        var ratio =  Math.max(window.devicePixelRatio || 1, 1);
        canvas.width = canvas.offsetWidth * ratio;
        canvas.height = canvas.offsetHeight * ratio;
        canvas.getContext("2d").scale(ratio, ratio);
    }
    window.onresize = resizeCanvas;
    resizeCanvas();
    signaturePad = new SignaturePad(canvas);

    clearButton.addEventListener("click", function (event) {
         signaturePad.clear();
    });

    saveButton.addEventListener("click", function (event) {
        event.preventDefault();
        var nombre_receptor_form = $("#nombre_receptor_form").val();
        var id_nombre_imagen = $("#id_nombre_imagen").val();

        if ( signaturePad.isEmpty() ) {
            alert("Please insert signature.");
        } else {
            var dataUrl = signaturePad.toDataURL();
            document.getElementById('imagen_firma').src = dataUrl;
            var imagen = dataUrl.replace(/^data:image\/(png|jpg);base64,/, "");
                $.ajax({
                    url: './includes/signature_pad.php',
                    type: 'POST',
                    data: {
                        imageData: imagen
                    },
                })
                .done(function(msg) {
                    // Image saved successfuly.
                    console.log("success: " + msg);
                    document.getElementById("my_form").submit(); //I do this to save other information.
                })
                .fail(function(msg) {
                    console.log("error: " + msg);
                });

`

¡Deseo que esto te sea útil!

¡Perfecto!
Gracias

@davidosuna1987 where are these two lines coming from?
var nombre_receptor_form = $("#nombre_receptor_form").val();
var id_nombre_imagen = $("#id_nombre_imagen").val();

@davidosuna1987 @stupendomen ¡Estoy teniendo problemas con esto! ¿Puede mostrarme cómo hacer que esto funcione? He copiado exactamente el código anterior y he agregado el archivo dbconenct.php y, sin embargo, no obtuve nada. Por favor ayuda lo antes posible

¿Puedes publicar el código completo? por favor

¡Gracias!

Gracias. Muy útil !

¡Gracias!

@davidosuna1987
Buenas, gracias por el aporte.

Pero no pude hacerlo funcionar con la nueva versión de SignaturePad o con la anterior.
¿Alguien podría poner un ejemplo de uso en php?

Muchísimas gracias

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

50l3r picture 50l3r  ·  3Comentarios

Emmark picture Emmark  ·  4Comentarios

derUli picture derUli  ·  3Comentarios

lowe493 picture lowe493  ·  5Comentarios

erangaapp picture erangaapp  ·  8Comentarios