Foros del Web » Programando para Internet » Javascript »

Guardar imagen CANVAS con php

Estas en el tema de Guardar imagen CANVAS con php en el foro de Javascript en Foros del Web. Hola muy buenas forosdelweb!!!!. Bueno llevo ya unas 2 semanas o más buscando la forma de poder tener una imagen y justo encima de ella ...
  #1 (permalink)  
Antiguo 07/05/2014, 02:43
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Pregunta Guardar imagen CANVAS con php

Hola muy buenas forosdelweb!!!!.

Bueno llevo ya unas 2 semanas o más buscando la forma de poder tener una imagen y justo encima de ella poder escribir para luego guardar esa imagen en una base de datos.

Lo he buscado de muchas formas y una que he visto ayer ha sido haciendo uso del CANVAS de esta forma conseguí poder escribir encima de una imagen de fondo pero NO he podido guardar esta imagen modificada.

El código CANVAS lo he conseguido de las siguientes páginas.

Al final he conseguido esto poder tener una imagen puesta debajo del CANVAS y poder dibujar con una paleta de dibujo.

Necesito saber como puedo seguir adelante, y mostrar la IMG en pantalla poder dibujar en ella correctamente y al final un botón de guardar esa imagen modificada con el texto que hayas puesto encima.

ESO es todo lo único que me falta es eso, poder guardar la imagen con el texto o dibujo que haya echo encima de ella con el Canvas

Se que puede que se haga de otra forma pero no lo he conseguido, he leído y se usa la función

Código Javascript:
Ver original
  1. window.open(canvas.toDataURL());
para guardar la imagen, pero no lo he conseguido.


Porfavor me gustaría me puedan ayudar.

PD: TODO este código de la paleta de dibujo en Canvas lo he sacado de esta web.
Donde podeis probarla en formato real.
Luego la he modificado un poco intentando conseguir guardar la imagen con el texto pero no he podido.
:(

Saludos y gracias al que me pueda ayudar con este tema de guarda la imagen con el texto modificado.
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #2 (permalink)  
Antiguo 07/05/2014, 13:39
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Guardar imagen CANVAS con php

primero aclaremos un poco las cosas:

window.open NO guarda nada, es una función para abrir ventanas, por lo que obviamente puedes deducir sin necesidad de estudiar la función, claro esta que con la presión uno puede volverse ciego y sordomudo.

veo que mencionas PHP, pero NO veo nada en lo que uses a PHP, por lo que me da a entender que no conoces php, si no es así, aclárame hasta que punto lo dominas.

lo primero que debes hacer es reorganizar tus ideas, y en eso puedo ayudarte:

1- primero busca en la documentación del objeto CANVAS si existe alguna función que te devuelva el binario de la imagen creada, o algo similar, creo recordar que existe una función que te proporciona el BASE64 (canvas.toDataURL() si no me equivoco y veo que ya la usas), lo cual te servirá perfectamente para lo que necesitas.

2- una vez obtengas ese BASE64 (o array binario codificado) necesitas enviarlo al servidor, allí está tu error, no puedes enviar un base64 a un servidor solo con el base64, necesitas enviar una petición al servidor.

3- para enviar el binario al servidor, puedes o usar un form oculto o usar AJAX.

4- una vez en PHP puedes hacer uso de fopen, base64_decode y fwrite para guardar la imagen en disco.

espero que con esto logres tu objetivo, si estás trancado postea tus avances
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 07/05/2014, 14:16
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Respuesta: Guardar imagen CANVAS con php

Buenas primero agradecer que te hayas interesado.

Y si he buscado muchas formas y ninguna la verdad lo he conseguido justo como hace falta (La imagen y escribir en ella en tiempo real).
(He conseguido esto de escribir encima de la imagen, pero no es justo como quiero por eso pruebo con Canvas.)

Es que no he posteado el código porque eran muchos caracteres y no me permitia además es bastante extenso porque es el código de la pagina que estoy haciendo, y además todo el código necesario para la paleta de dibujo y el canvas.

El php bueno lo único es que tengo un formulario con unos campos que rellenas de un trabajo para un cliente, estos campos son algunos:

descripcion
precio
pagado
etc....

Esto en un form que tengo bien los guardo todos correctos en la tabla trabajos, pero ahora en medio del Formulario necesito esto que quiero. Una imagen y encima de ella escribir texto y poder almacenarla después en el HDD y una URL en un campo de la tabla trabajos para luego hacer referencia a ella en otra página de pedidos o informes posteriormente.

Por eso necesito almacenar la imagen, una vez escrito el texto encima de ella, lo que creo puedo conseguir con CANVAS, Que he dado muy poco pero lo estoy intentando.

He estado mirando un poco sobre lo de Base64, pero me informaré más pero si lo he usado la verdad sin saber bien que es en el código.

En si necesito realizar un formulario y dentro una imagen editable, la editas y al dar a guardar pues que se guarde esa imagen modificada

Leeré acerca de lo que me has dicho. Gracias por tu interes y si puedes darme algunas pistas más sobre si voy bien encaminado o no,, lo agradezco.

REPOST: Estuve leyendo un poco sobre Base64 y es para codificar imagenes y de esta forma generar un código que es la imagen en si.

Quisiera saber si esa forma de codificar es la que puedo usar. Y en qué me ayudaría esto para poder tener la imagen y escribir encima de ella, y poder guardarla??? Perdona mi ignorancia pero poco o casi nada habia conocido sobre base64.

SI hace falta el código te lo puedo pasar por otro método para probarlo y ayudarme porfavor, es lo único que me hace falta lo de la imagen. Aquí no lo posteo porque es extenso.

Saludoos!!
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1

Última edición por HackID1; 07/05/2014 a las 15:04
  #4 (permalink)  
Antiguo 07/05/2014, 15:26
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 20 años, 4 meses
Puntos: 53
Respuesta: Guardar imagen CANVAS con php

En php puedes usar la función imagecreatefromstring para convertir el texto a imagen.

http://www.php.net/manual/en/functio...fromstring.php

Luego puedes usar la función imagejpeg para guardar la imagen a disco.

http://www.php.net/manual/en/function.imagejpeg.php

Código PHP:
Ver original
  1. <?php
  2. $data = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl'
  3.        . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr'
  4.        . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r'
  5.        . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg=='; //esto vendrá en el request
  6. $data = base64_decode($data);
  7.  
  8. $im = imagecreatefromstring($data);  //convertir a imagen
  9. if ($im !== false) {
  10.     imagejpeg($im, 'el_nombre_que_le_quieras_dar.jpg'); //guardar a disco
  11.     imagedestroy($im); //liberar memoria
  12. }
  13. else {
  14.     echo 'Un error ocurrio al convertir la imagen.';
  15. }
  16. ?>

Intenta ese ejemplo a ver si te funciona.

Saludos

PS: hace años que no programo en PHP, pero ese código se parece a como lo hago generalmente en ruby xD
  #5 (permalink)  
Antiguo 20/05/2014, 11:36
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Respuesta: Guardar imagen CANVAS con php

Buenas!! Gracias por las soluciones, mira he logrado poder dibujar a mano alzada encima de un Canvas el cual muestra una imagen por defecto de fondo.

Luego por medio de un botón se guarda la imagen con el dibujo a mano alzada escrito encima de el. Ok.

Pero quisiera poder añadir al código una forma de poder escribir texto encima del Canvas

He estado mirando y creo que se hace con.

Código Javascript:
Ver original
  1. ctx.font = '24px "Tahoma"';
  2.     ctx.fillText("Texto en el Canvas",0,0);

Pero no sale ni el texto encima de la imagen.

Como puedo hacer para escribir texto encima de el Canvas, o otra opción mejor (si se puede) es teclear un texto en un input="text" y que ese texto se traslade encima del canvas en una posición determinada.

¿Esto se puede.? Si podeís ayudarme con esto del Texto alguien que sea de uso habitual con el Canvas.

Si hace falta mi código lo puedo postear.
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #6 (permalink)  
Antiguo 20/05/2014, 12:23
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Respuesta: Guardar imagen CANVAS con php

He visto este código que permite tener un texto y moverlo por el Canvas, pues esto me gustaría unirlo de alguna forma con mi Código Canvas.

Se podría de alguna forma tener esta parte de código que permite mover el texto dentro de mi Canvas para poder mover el texto encima.
Espero puedan ayudarme. mi código es este:
fichero1.html
Código HTML:
Ver original
  1. <canvas id="canvas" width="290" height="330"></canvas>
  2.  
  3. <div class="gui">
  4.       <input type="color" id="color" value="#FF9200">
  5.       <button id="bt-clear">Limpiar</button>
  6.       <button id="bt-save">Guardar</button>
  7. </div>
  8.  
  9. <script src= "script/canvas.js"></script>

canvas.js
Código Javascript:
Ver original
  1. var tiemposcambian = tiemposcambian || {};
  2.  
  3. tiemposcambian.GuardandoPNGs = (function() {
  4.   var mousePressed = false;
  5.   var lastX, lastY;
  6.   var ctx;
  7.  
  8.   function init() {
  9.     // init canvas
  10.         //recojemos el canvas poniendo la id del canvas html5 para relacionarlo
  11.     var canvas = document.getElementById('canvas');
  12.     ctx = canvas.getContext('2d');
  13.         /*AÑADIDO*/
  14.     //creamos la nueva imagen
  15.                     var img = new Image(290,333);
  16.                     //le decimos la ruta de la imagen, en este caso html5.jpg
  17.                     img.src = "img_canvas/camisa2.png";
  18.                                
  19.                     img.onload = function() {
  20.                         //uso el contexto del canvas y el metodo drawimage para cargar el objeto y la posición x e y
  21.                         ctx.drawImage(img, 0, 0);
  22.                        
  23.                     }
  24.                    
  25.                    
  26.         /*FIN AÑADIDO*/
  27.     resetCanvas();
  28.    
  29.     /*
  30.     //Creamos una funcion que se ejecutará al iniciar la ventana
  31.                 function img_canvas() {
  32.                     //recojemos el canvas poniendo la id del canvas html5 para relacionarlo
  33.                     var canvas = document.getElementById("img");
  34.                     //Cojemos la 2D para dibujar en él
  35.                     var context = canvas.getContext("2d");
  36.                     //creamos la nueva imagen
  37.                     var img = new Image(290,333);
  38.                     //le decimos la ruta de la imagen, en este caso html5.jpg
  39.                     img.src = "img/camisa2.png";
  40.                    
  41.                    
  42.                 //pasamos la imagen al 2d del canvas y se dibujará
  43.                 //en 0 0 podemos poner las cordenadas de donde empezar a dibujar la imagen
  44.                 context.drawImage(img, 0, 0);
  45.                 };
  46.     */
  47.  
  48.     // button events
  49.     document.getElementById('bt-save').onmouseup = sendToServer;
  50.     document.getElementById('bt-clear').onmouseup = resetCanvas;
  51.  
  52.     // canvas events
  53.     canvas.onmousedown = function(e) {
  54.       draw(e.layerX, e.layerY);
  55.       mousePressed = true;
  56.     };
  57.  
  58.     canvas.onmousemove = function(e) {
  59.       if (mousePressed) {
  60.         draw(e.layerX, e.layerY);
  61.       }
  62.     };
  63.  
  64.     canvas.onmouseup = function(e) {
  65.       mousePressed = false;
  66.     };
  67.    
  68.     canvas.onmouseleave = function(e) {
  69.       mousePressed = false;
  70.     };
  71.   }
  72.  
  73.   function draw(x, y) {
  74.     if (mousePressed) {
  75.       ctx.beginPath();
  76.       ctx.strokeStyle = document.getElementById('color').value;
  77.       ctx.lineWidth = 4;
  78.       ctx.lineJoin = 'round';
  79.       ctx.moveTo(lastX, lastY);
  80.       ctx.lineTo(x, y);
  81.       ctx.closePath();
  82.       ctx.stroke();
  83.     }
  84.     lastX = x; lastY = y;
  85.   }
  86.  
  87.     /**/
  88.    
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.   /*****************************************************************************/
  97.                
  98.   function sendToServer() {
  99.     var data = canvas.toDataURL('image/png');
  100.     var xhr = new XMLHttpRequest();
  101.     xhr.onreadystatechange = function() {
  102.       // request complete
  103.       if (xhr.readyState == 4) {
  104.        
  105.         window.open('snapshots/'+xhr.responseText,'_blank');
  106.       }
  107.     }
  108.    
  109.     xhr.open('POST','snapshot.php',true);
  110.     xhr.setRequestHeader('Content-Type', 'application/upload');
  111.     xhr.send(data);
  112.   }
  113.  
  114.   function resetCanvas() {
  115.     // just repaint canvas white
  116.     ctx.fillStyle = '#EEEEEE';
  117.     ctx.fillRect(0, 0, canvas.width, canvas.height);
  118.    
  119.     /*añadido*/
  120.     //creamos la nueva imagen
  121.                     var img = new Image(290,333);
  122.                     //le decimos la ruta de la imagen, en este caso html5.jpg
  123.                     img.src = "img_canvas/camisa2.png";
  124.     //pasamos la imagen al 2d del canvas y se dibujará
  125.                 //en 0 0 podemos poner las cordenadas de donde empezar a dibujar la imagen
  126.                 //ctx.drawImage(img, 0, 0);
  127.                
  128.                 img.onload = function() {
  129.                         //uso el contexto del canvas y el metodo drawimage para cargar el objeto y la posición x e y
  130.                         ctx.drawImage(img, 0, 0);
  131.                     }
  132.     /* fin añadido*/
  133.   }
  134.  
  135.   return {
  136.     'init': init
  137.   };
  138. });
  139.  
  140.  
  141. window.onload = function() {
  142.   new tiemposcambian.GuardandoPNGs().init();
  143. };

Y el fichero se guarda con el botón "GUARDAR" esta parte de código no creo sea necesaria..
Solo quisiera poder tener una forma de escribir texto encima de este CANVAS.

Saludos y gracias a todos!!!
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #7 (permalink)  
Antiguo 27/05/2014, 09:38
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Respuesta: Guardar imagen CANVAS con php

Bueno lo he solucionado usando canvas.

Coloco una imagen de fondo y permite dibujar encima a mano alzada para luego guardar esta imagen.

Lo he conseguido buscando y buscando, lo que al final encontre estuvo en lostiemposcambian una web muy buena.

Gracias por todas sus ayudas!!!.
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1

Etiquetas: canvas, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:32.