Foros del Web » Programando para Internet » PHP »

Escribir sobre una imagen y guardarla modificada en BD

Estas en el tema de Escribir sobre una imagen y guardarla modificada en BD en el foro de PHP en Foros del Web. Como estan foreros!!!. Bueno hace varios días tengo una duda y no he podido solucionarla. Necesito mostrar una imagen en una página y que el ...
  #1 (permalink)  
Antiguo 27/04/2014, 15:29
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Pregunta Escribir sobre una imagen y guardarla modificada en BD

Como estan foreros!!!.

Bueno hace varios días tengo una duda y no he podido solucionarla.

Necesito mostrar una imagen en una página y que el usuario pueda escribir encima de ella, sea en la parte izquierda, centro, derecha o parte inferior. Ejemplo en una camiseta blanca que se pueda escribir ENCIMA.


Después de modificarla poder guardar esa imagen ya sea la imagen en la BD, o una ruta para poder después guardarla al cliente que se ha hecho el trabajo.

En otra página informes poder mostrar los trabajos realizados a algún cliente y que pueda visualizar la imagen modificada con el texto encima.


Lo he intentado de varias formas, pero quiero poder que la imagen se pueda escribir encima de ella y luego poder guardarla en la Base Datos.

Si hace falta dejo una forma que hice, pero creo que se puede conseguir mucho mejor hacer esto que quiero.
__________________
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 28/04/2014, 13:16
Avatar de ikaroraul  
Fecha de Ingreso: octubre-2006
Ubicación: La Paz
Mensajes: 391
Antigüedad: 18 años, 1 mes
Puntos: 16
Respuesta: Escribir sobre una imagen y guardarla modificada en BD

Hola, prueba buscando info de:

imagecreatefromjpeg()

y puedes agregar el texto usando:

imagettftext()

No esta tan dificil :) ademas con imagettftext() puedes personalizar fuentes.
__________________
Msn: [email protected]
  #3 (permalink)  
Antiguo 30/04/2014, 07:00
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Pregunta Respuesta: Escribir sobre una imagen y guardarla modificada en BD

Hola muchas gracias por tu respuesta, mira esa forma la he intentado haciendo uso de un formulario.


El Código Proporcionado por @Alexis88 es el siguiente:

---->

Fácil. Utiliza un pequeño formulario en el que solamente estarán la imagen que se sube y el campo de texto, luego, recibes esa imagen en el mismo archivo o en otro para procesar los datos como se muestra en el enlace que te dejé.


Código HTML:
Ver original
  1. <form action = "procesar.php" method = "post" enctype = "multipart/form-data">
  2.     Imagen: <input type = "file" name = "imagen" />
  3.     Texto: <input type = "text" name = "texto" />
  4.     <input type = "submit" value = "Enviar" />
  5. </form>

Archivo procesar.php

Código PHP:
Ver original
  1. header("Content-type: image/png");
  2. $cadena = $_POST["texto"];
  3. $im     = imagecreatefrompng($_FILES["imagen"]["tmp_name"]);
  4. $color = imagecolorallocate($im, 220, 210, 60);
  5. $px     = (imagesx($im) - 7.5 * strlen($cadena)) / 2;
  6. imagestring($im, 3, $px, 9, $cadena, $color);
  7. imagepng($im);

Ojo, la imagen con el texto quedan temporalmente, pues como verás, en ninguna parte subo la imagen al servidor, sin embargo, puedes guardarla manualmente como cuando lo haces con una imagen que encuentras en internet y ahí sí queda con el texto impreso.

--> FIN.

Bien .. a este código le he agregado algunos cambios para guardar la imagen como son la posicion DEL TEXTO ESCRITO. sea izquierda derecha o centro, o inferior, con una sentencia If else if ...

Así:
Código PHP:
Ver original
  1. <?php
  2.  
  3. /*Procesar imagen*/
  4.  
  5. header("Content-type: image/png");
  6. $cadena = $_POST["texto"];
  7. $posicion = $_POST["posicion"];
  8. $nombre = $_POST['nombre_img'];
  9.  
  10.     if ($posicion == "izquierda") {
  11.  
  12.         $im     = imagecreatefrompng($_FILES["imagen"]["tmp_name"]);
  13.         $color = imagecolorallocate($im, 220, 210, 60);
  14.         $px     = (imagesx($im) - 20 * strlen($cadena)) / 2 ;
  15.         imagestring($im, 7, $px, 70, $cadena, $color);
  16.         imagepng($im);      //visualiza en naveg
  17.         imagepng($im, "img/".$nombre.".jpg");   //guarda imagen en img/esenombre.
  18.         imagedestroy($im);
  19.     }
  20.     else if ($posicion == "derecha") {
  21.        
  22.         $im     = imagecreatefrompng($_FILES["imagen"]["tmp_name"]);
  23.         $color = imagecolorallocate($im, 220, 210, 60);
  24.         $px     = (imagesx($im) + 4 * strlen($cadena)) / 2  ;
  25.         imagestring($im, 7, $px, 70, $cadena, $color);
  26.         imagepng($im);
  27.         imagepng($im, "img/".$nombre.".jpg");
  28.         imagedestroy($im);
  29.     }
  30.     else if ($posicion == "centro") {
  31.        
  32.         $im     = imagecreatefrompng($_FILES["imagen"]["tmp_name"]);
  33.         $color = imagecolorallocate($im, 220, 210, 60);
  34.         $px     = (imagesx($im) - 7 * strlen($cadena)) / 2  ;
  35.         imagestring($im, 7, $px, 70, $cadena, $color);
  36.         imagepng($im);
  37.         imagepng($im, "img/".$nombre.".jpg");
  38.         imagedestroy($im);
  39.     }
  40.     else {
  41.        
  42.         $im     = imagecreatefrompng($_FILES["imagen"]["tmp_name"]);
  43.         $color = imagecolorallocate($im, 220, 210, 60);
  44.         $px     = (imagesx($im) - 7 * strlen($cadena)) / 2  ;
  45.         imagestring($im, 7, $px, 220, $cadena, $color);
  46.         imagepng($im);
  47.         imagepng($im, "img/".$nombre.".jpg");
  48.         imagedestroy($im);
  49.     }
  50.  
  51. /* $pos_arriba
  52.     +18 derecha arriba
  53.     -35 izq arriba.
  54.     -7  centro arriba.
  55.    
  56.     $pos_centro
  57.     -7
  58.     120
  59.    
  60.     $pos_inferior
  61.     -7
  62.     220
  63.    
  64.     $px     = (imagesx($im) - $pos_arriba * strlen($cadena)) / 2;
  65.     imagestring($im, 12, $px, 70, $cadena, $color); */
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72. /*original
  73.  
  74. header("Content-type: image/png");
  75. $cadena = $_POST["texto"];
  76.  
  77. $im     = imagecreatefrompng($_FILES["imagen"]["tmp_name"]);
  78. $color = imagecolorallocate($im, 220, 210, 60);
  79. $px     = (imagesx($im) - 7.5 * strlen($cadena)) / 2;
  80. imagestring($im, 12, $px, 19, $cadena, $color);
  81. imagepng($im);
  82. imagedestroy($im);
  83. */
  84.  
  85. ?>

Pero me gustaría poder guardar esa imagen en la BD. eso como lo hago, para luego en otra página hacer una consulta y mostrar por ejemplo:

Nombre cliente:
Cod trabajo
Imagen
Descripcion
Precio.

Y que en donde ponga imagen se vea la imagen en esa página ya modificada.

Espero puedan ayudarme un poco con esto de escribir encima de una imagen y guardar la imagen en bd, para posteriores consultas.

saludos!!!! Espero ayuda de los expertos en PHP.

NOTA: Si es más fácil en JQuery u otro lenguaje lo agradecería me ayudarán con este problema, llevo ya casi 2 semanas con él.

Saludos 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
  #4 (permalink)  
Antiguo 03/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
Pregunta Respuesta: Escribir sobre una imagen y guardarla modificada en BD

Holaa forosdelweb!!!!.

He buscado de varias formas como poder escribir en una imagen y luego esa imagen guardarla en la BD dependiendo de que cliente la haya solicitado en su trabajo.

Todo el código es la misma página. alta_trabajo1.php


Tengo este formulario para seleccionar una imagen y escribir un texto en el campo, luego se procesa en otro fichero llamado procesar.php. (el fichero no lo expongo, ya que es solo para ver la imagen con el texto, NO para guardarla).


Código HTML:
Ver original
  1. form para ver imagen y crear img
  2.                
  3.                 <form action = "procesar.php" method = "post" enctype = "multipart/form-data">
  4.                    
  5.                     Seleccione la imagen que desea estampar con el texto. <br/><br/>
  6.                    
  7.                     Imagen: <input type = "file" name = "imagen" required='required'/><br/><br/>
  8.                     Texto sobre la imagen: <input type = "text" name = "texto" maxlength="9" required='required'/><br/><br/>
  9.                     Nombre para la imagen: <input type = "text" name = "nombre_img" required='required'/><br/><br/>
  10.                     Posici&oacute;n del texto: <select name="posicion" required='required'>
  11.                                         <option value="izquierda">Superior Izquierda</option>
  12.                                         <option value="derecha">Superior derecha</option>
  13.                                         <option value="centro">Superior Centrada</option>
  14.                                         <option value="inferior">Inferior Centrada</option>
  15.                                     </select><br/><br/>
  16.  
  17.                     <input type = "submit" value = "Ver Imagen" name="ver" />
  18.                     <input type = "button" value = "Guardar Imagen" name="guardar" />
  19.                 </form> <br/><br/>

Bien el anterior formulario el botón VER es solo para visualizar la imagen con el texto encima. Una vez visto tienes que regresar a este formulario y continuar.


El código a continuacion son DATOS mostrados de la BD dependiendo del CODCLIENTE seleccionado en una página anterior.

Código PHP:
Ver original
  1. <?php
  2.  
  3. include("abre_conexion.php");
  4.            
  5.             $codcliente=$_GET["id"]; //Recibimiento de la variable id
  6.            
  7.            
  8.             $query=  "
  9.                         SELECT cl.codcliente, cl.nombre, cl.apellido, cl.telefono, cl.email, cl.codvip
  10.                         FROM $tabla_db1 cl
  11.                         WHERE cl.codcliente ='$codcliente'
  12.                         GROUP BY codcliente
  13.                         "; //Hacemos la consulta con el id
  14.            
  15.             $result = mysql_query($query);
  16.  
  17.             while ($registro = mysql_fetch_array($result)){
  18.  
  19.            
  20.             //ESTA PARTE DEL FORM esta creada para mostrar los datos del cliente desde la bd. la 2 parte esta abajo.
  21.             echo "
  22.  
  23.             <div align='center'>
  24.                 <table border='0' width='25%' style='font-family: Verdana; font-size: 8pt' id='table1'>
  25.                     <tr>
  26.                         <td colspan='2'></td>
  27.                     </tr>
  28.                     <tr>
  29.                         <td colspan='2' align='center'>Cliente seleccionado: </td>
  30.                     </tr>
  31.                     <form name='form_recibe' action='alta_trabajo2.php' method='post' id='form1'>
  32.                     <tr>
  33.                         <td width='50%'>&nbsp;</td>
  34.                         <td width='50%'>&nbsp;</td>
  35.                     </tr>
  36.                     <tr>
  37.                         <td width='50%'><b>C&oacute;digo Cliente: </b></td>
  38.                         <td width='50%'><input type='text' name='codcliente' size='20' value='".$registro['codcliente']."' readonly='readonly' id='nar'></td>
  39.                     </tr>
  40.                     <tr>
  41.                         <td width='50%'><b>Nombre: </b></td>
  42.                         <td width='50%'><input type='text' name='nombre' size='20' value='".$registro['nombre']."' maxlength='50' readonly='readonly' id='nar'></td>
  43.                     </tr>
  44.                     <tr>
  45.                         <td width='50%'><b>Apellido: </b></td>
  46.                         <td width='50%'><input type='text' name='apellido' size='20' value='".$registro['apellido']."' maxlength='50' readonly='readonly' id='nar'></td>
  47.                     </tr>
  48.  
  49. </table>
  50.             </div> <br/>
  51.                 ";
  52.                
  53.             }
  54.            
  55.             ?>


Esta parte es la continuacion del 2 FORMULARIO rellenas los campos y le das a enviar.

OK ahora viene el problema..

Código HTML:
Ver original
  1. <label> Presupuesto: </label>
  2.                                     <input type="text" name="precio" maxlength="10" required="required" onkeypress="return soloNumeros(event)"/>
  3.                                     <br/><br/>
  4.                                    
  5.                                     <label> Pagado: </label>
  6.                                     Si: <input type="radio" name="pagado" value="si" />
  7.                                     No: <input type="radio" name="pagado" value="no" />
  8.                                     <br/><br/>
  9.                                    
  10.                                     <label> AC: </label>
  11.                                     <input type="text" name="ac" maxlength="25" onkeypress="return soloNumeros(event)"/>
  12.                                     <br/><br/>
  13.                                    
  14.                                    
  15.                                
  16.                                
  17.                                 <input name="enviar" type="submit" value="Guardar"/>
  18.                                 <input type="reset" name="Limpiar" value=" Limpiar " style="background-color: orange">
  19.                                 <br/><br/>
  20.                             </fieldset>
  21.                    
  22.                         </form>

Todo el código es una misma página.


PREGUNTA:

Como ven Hay 2 formularios.
1. Para crear la imagen con el texto y visualizarla.
2. Mostrar datos del cliente y a parte rellenar algunos mas.


¿Cómo puedo hacer para conocer la imagen que se ha creado y guardarla en un campo de la BD junto con el CODCLIENTE que la ha creado?


Es un poco confuso, pero en fin quiero guardar la imagen o una RUTA de la localización de la imagen para posteriormente en un informe del cliente, se pueda ver la imagen con el texto e imprimirla.



Saludos
__________________
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
  #5 (permalink)  
Antiguo 03/05/2014, 10:01
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Escribir sobre una imagen y guardarla modificada en BD

Con la misma función imagepng que se encuentra en la línea número 7 del código original que te pasé, puedes imprimir la imagen en pantalla y guardarla en el servidor.

Código PHP:
Ver original
  1. //Genero un nombre con un número aleatorio
  2. $nombre = "imagen-" . mt_rand(1000, 10000) . ".jpg";
  3.  
  4. //La imprimo en pantalla
  5. imagepng($im);
  6.  
  7. //Guardo la imagen en la carpeta "imagenes"
  8. imagepng($im, "../imagenes/{$nombre}");
  9.  
  10. //Guardo el nombre en la BD
  11. mysqli_query($conexion, "INSERT INTO tabla (imagen) VALUES ('{$nombre}')");

Guardas el nombre de la imagen y el Id del usuario en la tabla de la BD y en un futuro cuando consultes dichos datos, simplemente los filtras por el Id y así podrás obtener tanto los datos del usuario como el nombre de la imagen.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 03/05/2014 a las 10:32 Razón: Información que no alcancé a escribir por corte de energía eléctrica
  #6 (permalink)  
Antiguo 03/05/2014, 10:34
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Respuesta: Escribir sobre una imagen y guardarla modificada en BD

He probado con lo que me dices, pero no logro guardar el resultado.

En mi tabla llamada trabajos es donde quiero almacenar la imagen y el trabajo rellenado en el 2 formulario.

El código que puse en el fichero procesar.php (que procesa la imagen) es:

Código PHP:
Ver original
  1. <?php
  2.  
  3. /*Procesar imagen*/
  4.  
  5. header("Content-type: image/png");
  6. $cadena = $_POST["texto"];
  7. $posicion = $_POST["posicion"];
  8. $nombre = $_POST['nombre_img'];
  9.  
  10. if ($posicion == "izquierda") {
  11.  
  12.         //Genero un nombre con un número aleatorio
  13.         $nombre = $nombre . mt_rand(1000, 10000) . ".jpg";
  14.         /*
  15.         //La imprimo en pantalla
  16.         imagepng($im);
  17.          
  18.         //Guardo la imagen en la carpeta "imagenes"
  19.         imagepng($im, "img/{$nombre}");
  20.          */
  21.         //Guardo el nombre en la BD
  22.         //mysqli_query($conexion, "INSERT INTO tabla (imagen) VALUES ('{$nombre}')");
  23.    
  24.    
  25.         $im     = imagecreatefrompng($_FILES["imagen"]["tmp_name"]);
  26.         $color = imagecolorallocate($im, 220, 210, 60);
  27.         $px     = (imagesx($im) - 20 * strlen($cadena)) / 2 ;
  28.         imagestring($im, 7, $px, 70, $cadena, $color);
  29.         imagepng($im);      //visualiza en naveg
  30.         imagepng($im, "img/{$nombre}");
  31.         //imagepng($im, "img/".$nombre.".jpg"); //guarda imagen en img/esenombre.
  32.        
  33.         include("abre_conexion.php");
  34.         $query=  "INSERT INTO trabajos VALUES ('','','','','',
  35.                                                 '','','','','{$nombre}','','','')";
  36.        
  37.                 $result = mysql_query($query);
  38.         //imagedestroy($im);
  39.        
  40.        
  41.        
  42.     }
  43.     else if ($posicion == "derecha") {
  44.        
  45.         $im     = imagecreatefrompng($_FILES["imagen"]["tmp_name"]);
  46.         $color = imagecolorallocate($im, 220, 210, 60);
  47.         $px     = (imagesx($im) + 4 * strlen($cadena)) / 2  ;
  48.         imagestring($im, 7, $px, 70, $cadena, $color);
  49.         imagepng($im);
  50.         imagepng($im, "img/".$nombre.".jpg");
  51.         imagedestroy($im);
  52.     }
  53.     else if ($posicion == "centro") {
  54.        
  55.         $im     = imagecreatefrompng($_FILES["imagen"]["tmp_name"]);
  56.         $color = imagecolorallocate($im, 220, 210, 60);
  57.         $px     = (imagesx($im) - 7 * strlen($cadena)) / 2  ;
  58.         imagestring($im, 7, $px, 70, $cadena, $color);
  59.         imagepng($im);
  60.         imagepng($im, "img/".$nombre.".jpg");
  61.         imagedestroy($im);
  62.     }
  63.     else {
  64.        
  65.         $im     = imagecreatefrompng($_FILES["imagen"]["tmp_name"]);
  66.         $color = imagecolorallocate($im, 220, 210, 60);
  67.         $px     = (imagesx($im) - 7 * strlen($cadena)) / 2  ;
  68.         imagestring($im, 7, $px, 220, $cadena, $color);
  69.         imagepng($im);
  70.         imagepng($im, "img/".$nombre.".jpg");
  71.         imagedestroy($im);
  72.     }
  73.  
  74. }
  75.  
  76. ?>

Con ese código intento guardar la imagen, luego ya pasaré a ver como guardar la imagen y el formulario relleno juntos todos para el mismo cliente en la tabla trabajos.

¿Que fallo tengo porque la consulta no se ejecuta.?

Muchas gracias Alexis88 por tu ayuda!



Pero me gustaria guardar la imagen que este relacionada con el codcliente que ha pedido el trabajo.
__________________
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; 03/05/2014 a las 10:41
  #7 (permalink)  
Antiguo 03/05/2014, 10:57
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Escribir sobre una imagen y guardarla modificada en BD

Te complicas en vano. El tema de la posición del texto debes de tenerlo aparte y no estar repitiendo tantas líneas de código. Tranquilamente puedes unificar ambos formulario, pues al formulario de datos solamente haría falta añadirle un <input type = "file"> y una caja de texto para añadir el texto a la imagen. Finalmente, guardas la imagen en la carpeta del servidor, los datos de la persona y el nombre de la imagen generada.

inicio.html
Código HTML:
Ver original
  1. <form action = "fin.php" method = "post" enctype = "multipart/form-data">
  2.     Nombre: <input type = "text" name = "nombre" />
  3.     Apellidos: <input type = "text" name = "apellidos" />
  4.     Imagen: <input type = "file" name = "imagen" />
  5.     Texto: <input type = "text" name = "texto" />
  6.  
  7.     <input type = "submit" name = "enviar" />
  8. </form>

fin.php
Código PHP:
Ver original
  1. include "conexion.php";
  2. header("Content-type: image/png");
  3.  
  4. $cadena = $_POST["texto"];
  5. $imagen = "imagen-" . mt_rand(1000, 10000) . ".jpg";
  6. $nombre = mysql_real_escape_string(strip_tags($_POST["nombre"]));
  7. $apellidos = mysql_real_escape_string(strip_tags($_POST["apellidos"]));
  8.  
  9. $im     = imagecreatefrompng($_FILES["imagen"]["tmp_name"]);
  10. $color = imagecolorallocate($im, 220, 210, 60);
  11. $px     = (imagesx($im) - 7.5 * strlen($cadena)) / 2;
  12. imagestring($im, 3, $px, 9, $cadena, $color);
  13. imagepng($im);
  14. imagepng($im, "../imagenes/{$imagen}");
  15.  
  16. mysql_query(sprintf("INSERT INTO tabla (nombre, apellidos, imagen) VALUES ('%s', '%s', '%s')", $nombre, $apellidos, $imagen));

No incluyo el campo del Id porque asumo que es autoincremental, pero si no fuera así, añádelo.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 03/05/2014, 12:37
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Respuesta: Escribir sobre una imagen y guardarla modificada en BD

Todo correcto, lo único que ahora la imagen ya no se puede visualizar previamente antes de guardarla, era por eso que intentaba con 2 formularios pero no lo conseguía.

De esta forma si se guardan los datos y en un campo llamado tipo_imagen guardo el nombre de la imagen.

Solo 2 cosas más:

1. Para visualizar la imagen previamente veo que con este formulario no me da la imagen en el navegador aunque sea tipo header("Content-type: image/png"); ,

2. Como en el campo tipo_imagen guardo el nombre de la imagen, esto lo podré usar para en otra página hacer un link a la imagen y visualizarla.

Gracias amigo!!!. He unido todo el formulario como me has dicho, lo de la posición de la imagen lo he dejado igual se que repite mucho código pero es la forma que vi, lo único fue lo de no poder ver la imagen antes de guardar.

Muchisimas graciias de todas formas!!!! me has ayudado siempre mucho, !! jeje y sii me complique bastante.
Saludoos!!

PD: Para visualizar previamente la imagen creada con el texto escrito, intente hacer un button con href hacia el fichero procesar.php pero no fue correcta.
__________________
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
  #9 (permalink)  
Antiguo 03/05/2014, 12:41
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Escribir sobre una imagen y guardarla modificada en BD

Con el código que te proporcioné en mi última respuesta, visualizo la imagen guardada (con el texto) y guardo la información en la base de datos, incluida la imagen en el servidor. Con lo escrito en la línea 13 es que visualizo la imagen. Quizá algo estás haciendo mal.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #10 (permalink)  
Antiguo 03/05/2014, 13:05
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Respuesta: Escribir sobre una imagen y guardarla modificada en BD

El fallo mio se debe a hacer la consulta y el include en ese fichero.

No se como te ha funcionado a ti, yo comento esas 2 lineas y se ve la imagen, pero claro no se hace la consulta.

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. header("Content-type: image/png");
  5. //include "abre_conexion.php";
  6. $cadena = $_POST["texto"];
  7. $imagen = "imagen-" . mt_rand(1000, 10000) . ".jpg";
  8. $nombre = mysql_real_escape_string(strip_tags($_POST["nombre"]));
  9. $apellidos = mysql_real_escape_string(strip_tags($_POST["apellidos"]));
  10.  
  11. $im     = imagecreatefrompng($_FILES["imagen"]["tmp_name"]);
  12. $color = imagecolorallocate($im, 220, 210, 60);
  13. $px     = (imagesx($im) - 7.5 * strlen($cadena)) / 2;
  14. imagestring($im, 3, $px, 9, $cadena, $color);
  15. imagepng($im);
  16. imagepng($im, "img/{$imagen}");
  17.  
  18. //mysql_query(sprintf("INSERT INTO tabla (nombre, apellidos, imagen) VALUES ('%s', '%s', '%s')", $nombre, $apellidos, $imagen));
  19.  
  20.  ?>

El include lo he probado tanto antes como después de header("Content-type: image/png"); pero ese se supone es el fallo que no me deja mostrar la imagen.
__________________
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
  #11 (permalink)  
Antiguo 03/05/2014, 13:20
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Escribir sobre una imagen y guardarla modificada en BD

Así es como literalmente lo he hecho:

Código PHP:
Ver original
  1. mysql_connect("localhost", "root", "mypassword");
  2. mysql_select_db("bd_fotos");
  3. header("Content-type: image/png");
  4.  
  5. $cadena = $_POST["texto"];
  6. $imagen = "imagen-" . mt_rand(1000, 10000) . ".jpg";
  7. $nombre = mysql_real_escape_string(strip_tags($_POST["nombre"]));
  8. $apellidos = mysql_real_escape_string(strip_tags($_POST["apellidos"]));
  9.  
  10. $im     = imagecreatefrompng($_FILES["imagen"]["tmp_name"]);
  11. $color = imagecolorallocate($im, 220, 210, 60);
  12. $px     = (imagesx($im) - 7.5 * strlen($cadena)) / 2;
  13. imagestring($im, 3, $px, 9, $cadena, $color);
  14. imagepng($im);
  15. imagepng($im, "../images/{$imagen}");
  16.  
  17. mysql_query(sprintf("INSERT INTO tabla (nombre, apellido, foto) VALUES ('%s', '%s', '%s')", $nombre, $apellidos, $imagen));

Y se guardan tanto los datos en la BD como la imagen en la carpeta del servidor y se muestra la imagen con el texto. El formulario es el mismo que puse de ejemplo en una de mis respuestas anteriores. Podrías probar imprimiendo la consulta para ver si se están agregando los datos correctamente, es decir, haz esto:

Código PHP:
Ver original
  1. echo sprintf("INSERT INTO tabla (nombre, apellido, foto) VALUES ('%s', '%s', '%s')", $nombre, $apellidos, $imagen);

Coloca los datos que corresponden a los tuyos, luego, si ves que todo está en orden (con respecto a la consulta), cópiala y pégala en tu administrador de BD, por ejemplo, phpMyadmin, así descartarás una posible falla en la consulta.

Saludos

Edito: Solo por curiosidad, ¿Estás colocando TUS datos?, es decir, el nombre de tu tabla y sus campos así como tus variables. Quizá esa sea la falla que estás teniendo.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 03/05/2014 a las 13:57
  #12 (permalink)  
Antiguo 03/05/2014, 14:07
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Respuesta: Escribir sobre una imagen y guardarla modificada en BD

Amigo gracias acabo de ver tu respuesta porque estaba buscando el fallo al final lo he podido conseguir, y si lo único que he cambiado es el include("abre_conexion.php"); lo que eliminado del fichero y he puesto todos los datos de conexión en vez de hacer un include.

Ya me ha funcionado todo. De verdad muchas gracias por toda tu ayuda.
Dejo la respuesta mia aquí.

Código PHP:
Ver original
  1. header("Content-type: image/png");
  2.  
  3. $cadena = $_POST["texto"];
  4. $posicion = $_POST["posicion"];
  5. $nombre = $_POST['nombre_img'];
  6. $enviar = $_POST['enviar'];
  7.  
  8.     if ($posicion == "izquierda") {
  9.        
  10.         $enviar = $_POST['enviar'];
  11.  
  12.             $codcliente = $_POST['codcliente'];
  13.             $tipo_trabajo = $_POST['tipo_trabajo'];
  14.             $estado = $_POST['estado'];
  15.             $observacion = $_POST['observacion'] ;
  16.             $descripcion = $_POST['descripcion'];
  17.            
  18.             $dia1 = $_POST['dia1'] ;
  19.             $mes1 = $_POST['mes1'] ;
  20.             $anio1 = $_POST['anio1'] ;
  21.             // creamos fecha_entrada Uniendo $anio1 . $mes1 . $dia1
  22.             $fecha_entrada = $anio1 . $mes1 . $dia1 ;
  23.            
  24.             $dia2 = $_POST['dia2'] ;
  25.             $mes2 = $_POST['mes2'] ;
  26.             $anio2 = $_POST['anio2'] ;
  27.             // creamos fecha_entrega Uniendo $anio2 . $mes2 . $dia2
  28.             $fecha_entrega = $anio2 . $mes2 . $dia2 ;
  29.            
  30.             $precio = $_POST['precio'];
  31.             $pagado = $_POST['pagado'];
  32.             $ac = $_POST['ac'];
  33.            
  34.             /************ imagen visualizacion y creacion ***********/
  35.             $nombre = $nombre."-" . mt_rand(1000, 10000) ;
  36.            
  37.             $im     = imagecreatefrompng($_FILES["imagen"]["tmp_name"]);
  38.             $color = imagecolorallocate($im, 220, 210, 60);
  39.             $px     = (imagesx($im) - 20 * strlen($cadena)) / 2 ;
  40.             imagestring($im, 7, $px, 70, $cadena, $color);
  41.             imagepng($im);      //visualiza en naveg
  42.             imagepng($im, "img/".$nombre.".png");   //guarda imagen en img/esenombre.
  43.             imagedestroy($im);
  44.            
  45.             /**** DATOS DE CONEXION **********/        
  46.             $hotsdb = "localhost";  //valor de nuestra BD
  47.             $basededatos = "mibasedatos";   //sera el valor de nuestra BD
  48.  
  49.             $usuariodb = "root";        //sera el valor de nuestra BD
  50.             $clavedb = "";      //sera el valor de nuestra BD
  51.  
  52.  
  53.             $conexion_db = mysql_connect("$hotsdb","$usuariodb","$clavedb")
  54.                 or die ("Conexión denegada, el Servidor de BD que solicita
  55.                         NO EXISTE");
  56.                 $db = mysql_select_db("$basededatos", $conexion_db)
  57.                 or die ("La Base de Datos <b>$basededatos</b> NO EXISTE");
  58.  
  59.                
  60.             /**** QUERY **********/            
  61.             mysql_query("INSERT INTO trabajos
  62.                                     VALUES ('', '$codcliente', '$tipo_trabajo', '$estado', '$observacion',
  63.                                     '$descripcion', '$precio', '$pagado', '', '$nombre', '$fecha_entrada',
  64.                                     '$fecha_entrega', '$ac')");
  65.                        
  66.                
  67.        
  68.     }

Ese mismo código pero variando la posicion sea derecha centrada o inferior, ya que varia el lugar donde se escribe el texto.


Y claro todas las VARIABLES vienen de un fichero anterior que es el del formulario, para tener todos los campos de la Tabla de la BD.

Un saludo te agradezco toda tu ayuda en este problema, no hubiera sido capaz sino me hubieras ayudado con todo.

Cita:
Ya mañana veré como mostrar la imagen de cada trabajo llamandola en otra pagina de informes.php , supongo que con un <img src=rutaynombreimagen /> se vería la imagen de la carpeta img/
Saludoos muchisimas gracias!!!


PD: y una cosa que he visto en tus códigos que no habia visto antes.

Cita:

echo sprintf("INSERT INTO tabla (nombre, apellido, foto) VALUES ('%s', '%s', '%s')", $nombre, $apellidos, $imagen);
¿Qué hacen los %s entre parentesis. ??, pienso que es la sintaxis de sprintf.. voy a informarme jeje.
__________________
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
  #13 (permalink)  
Antiguo 03/05/2014, 14:31
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Escribir sobre una imagen y guardarla modificada en BD

Exacto. Lee la documentación de la función sprintf y sus parámetros para que aprendas a utilizarla.

Saludos

Edito: Añadí unas cuantas líneas más a la sección del código en donde coloco el texto sobre la imagen, la guardo y muestro. Ahora, además de funciones con los archivos de imagen de tipo PNG, también lo hará con los de tipo JPEG y GIF.

Código PHP:
Ver original
  1. switch ($_FILES["imagen"]["type"]){
  2.     case "image/jpeg":
  3.         $im = imagecreatefromjpeg($_FILES["imagen"]["tmp_name"]);
  4.     break;
  5.  
  6.     case "image/png":
  7.         $im = imagecreatefrompng($_FILES["imagen"]["tmp_name"]);
  8.     break;
  9.  
  10.     case "image/gif":
  11.         $im = imagecreatefromgif($_FILES["imagen"]["tmp_name"]);
  12.     break;
  13. }
  14.  
  15. $color = imagecolorallocate($im, 220, 210, 60);
  16. $px = (imagesx($im) - 7.5 * strlen($cadena)) / 2;
  17. imagestring($im, 3, $px, 9, $cadena, $color);
  18.  
  19. switch ($_FILES["imagen"]["type"]){
  20.     case "image/jpeg":
  21.         imagejpeg($im);
  22.         imagejpeg($im, "{$imagen}");
  23.     break;
  24.  
  25.     case "image/png":
  26.         imagepng($im);
  27.         imagepng($im, "{$imagen}");
  28.     break;
  29.  
  30.     case "image/gif":
  31.         imagegif($im);
  32.         imagegif($im, "{$imagen}");
  33.     break;
  34. }
  35.  
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 04/05/2014 a las 00:47
  #14 (permalink)  
Antiguo 12/05/2014, 13:04
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Pregunta Respuesta: Escribir sobre una imagen y guardarla modificada en BD

Cita:
Iniciado por Alexis88 Ver Mensaje
Exacto. Lee la documentación de la función sprintf y sus parámetros para que aprendas a utilizarla.

Saludos

Edito: Añadí unas cuantas líneas más a la sección del código en donde coloco el texto sobre la imagen, la guardo y muestro. Ahora, además de funciones con los archivos de imagen de tipo PNG, también lo hará con los de tipo JPEG y GIF.

Código PHP:
Ver original
  1. switch ($_FILES["imagen"]["type"]){
  2.     case "image/jpeg":
  3.         $im = imagecreatefromjpeg($_FILES["imagen"]["tmp_name"]);
  4.     break;
  5.  
  6.     case "image/png":
  7.         $im = imagecreatefrompng($_FILES["imagen"]["tmp_name"]);
  8.     break;
  9.  
  10.     case "image/gif":
  11.         $im = imagecreatefromgif($_FILES["imagen"]["tmp_name"]);
  12.     break;
  13. }
  14.  
  15. $color = imagecolorallocate($im, 220, 210, 60);
  16. $px = (imagesx($im) - 7.5 * strlen($cadena)) / 2;
  17. imagestring($im, 3, $px, 9, $cadena, $color);
  18.  
  19. switch ($_FILES["imagen"]["type"]){
  20.     case "image/jpeg":
  21.         imagejpeg($im);
  22.         imagejpeg($im, "{$imagen}");
  23.     break;
  24.  
  25.     case "image/png":
  26.         imagepng($im);
  27.         imagepng($im, "{$imagen}");
  28.     break;
  29.  
  30.     case "image/gif":
  31.         imagegif($im);
  32.         imagegif($im, "{$imagen}");
  33.     break;
  34. }
  35.  
HOLA !!!.

Bueno posteo aquí para seguir el tema que aún sigue la duda.

Tengo que mostrar la imagen en la página web y poder escribir encima de ella pero en tiempo real, es decir que se pueda escribir simplemente dando clic encima de la imagen y te permita escribir texto en ella, después un botón para GUARDAR todo el formulario y se almacena la imagen con la modificación en una carpeta del pc, Y que tengan un nombre las imagenes. que este lo guardo yo en un campo de la BD.

Sabes algo de como poder escribir encima de la imagen y poder guardarla?.

He buscado y mirado con JQuery pero no he logrado guardar la imagen con el texto.

Aqui una demo, aunque yo solo necesito escribir en ella y guardar, no cambiar colores etc.

http://www.oscardelossantos.es/softw...nt-con-canvas/

Un saludo!!.. Gracias por sus aportes.! espero ayuda porfavor llevo tiempo con este problema y no he podido dar con la solución.
Si me pueden ayudar muchas gracias!!!.
PD: Alex88 veo que tu sabes bastante y me has ayudado mucho por eso cito tu ultimo comentario :) un saludo!
__________________
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
  #15 (permalink)  
Antiguo 13/05/2014, 13:23
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Escribir sobre una imagen y guardarla modificada en BD

Pues, con el algoritmo que te mostré, puedes escribir y guardar la imagen que seleccionaste pero con el texto dibujado. Si buscas hacerlo en tiempo real, bastaría con que envíes a la imagen seleccionada como recurso en el cual se añada el texto escrito. Guíate del ejemplo que te di para hacerlo, aunque también podrías hacerlo con <canvas>, pero ese ya no es tema de PHP.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #16 (permalink)  
Antiguo 13/05/2014, 15:24
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Respuesta: Escribir sobre una imagen y guardarla modificada en BD

Buenas!, si pero como realizo esto de enviar la imagen (que sería siempre la misma) para añadirle el texto.

Con canvas lo he intentado pero no consigo poner la imagen de fondo y poder guardarla editada.
__________________
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: bd
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 12:53.