Foros del Web » Programando para Internet » PHP »

Código para meter texto en imagen

Estas en el tema de Código para meter texto en imagen en el foro de PHP en Foros del Web. Hola. Tengo la librería GD 3.4 (más o menos), con lo cuál se supone que no tengo que tener problema para poder meter texto en ...
  #1 (permalink)  
Antiguo 23/06/2011, 06:05
 
Fecha de Ingreso: abril-2011
Mensajes: 39
Antigüedad: 13 años, 7 meses
Puntos: 1
Código para meter texto en imagen

Hola. Tengo la librería GD 3.4 (más o menos), con lo cuál se supone que no tengo que tener problema para poder meter texto en una imagen y hacer algunas cuantas "perrerías" más con las imágenes. Pues todo son problemas... Con todos los códigos que he probado (unos cuantos ya) no he conseguido nada, y en el que más cerca he estado ha sido con la clase class.upload_0.31, pero tanto en esta como en las demás siempre tengo el típico (o para mí ya es típico) error de header. ¿Qué puedo hacer? ¿Hay por ahí algún código minimalista que pueda hacer exactamente lo que quiero, que es poder guardar como imagen un texto que escribo encima? Gracias por vuestras aportaciones.
  #2 (permalink)  
Antiguo 23/06/2011, 06:06
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 10 meses
Puntos: 209
Respuesta: Código para meter texto en imagen

lo que quieres es hacer una marca de agua con texto
busca sobre watermark+php
hay varios ejemplos
  #3 (permalink)  
Antiguo 23/06/2011, 08:35
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 8 meses
Puntos: 336
Respuesta: Código para meter texto en imagen

escribir sobre una imagen no debería darte problemas, sigue estos pasos:

1.- Lo primero que debes definir es si quieres mostrar la imagen o necesitas guardarla, si quieres que el usuario la pueda descargar entonces debes guardarla.

2.- no necesitas ninguna libreria o clase especial, simplemente con GD o GD2, ademas también es buena idea que hagas en tu servidor web una carpeta de fuentes que puedes nombrar por ejemplo "fuentes" donde guardes las fuentes que quieras usar (Verdana, Arial, etc)

3.- Para comenzar creas la imágen dependiendo del formato:
Código PHP:
Ver original
  1. imagepng($img,"Lote_$lot.png");
  2. imagejpeg($img,"Lote_$lot.png");
  3. imagegif($img,"Lote_$lot.png");
  4. imagewbmp($img,"Lote_$lot.png");

4.- Creas un color para escribir:
Código PHP:
Ver original
  1. $coltext=imagecolorallocate($img,255,255,255); //Color texto (blanco)

5.- Escribes en la imagen con el color y fuente elegida, dependiendo del tipo de fuente:
Código PHP:
Ver original
  1. imagettftext($img,9,0,20,40,$coltext,"verdana.ttf","Tu texto"); // para fuentes True Type
  2. imagefttext($img,9,0,20,40,$coltext,"verdana.ft","Tu texto"); // para fuentes Free Type

para ambos casos los parametros son los mismos
Código PHP:
Ver original
  1. (imagen,tamaño(int),rotacion,posicion x,posicion y,color, fuente(dir),texto(str));

6.- luego puedes guardarla o mostrarla (o ambos XD), tambien dependiendo del formato
Código PHP:
Ver original
  1. // para guardar
  2. imagepng($img,"mi_imagen.png");
  3. imagejpeg($img,"mi_imagen.png");
  4. imagegif($img,"mi_imagen.png");
  5. imagewbmp($img,"mi_imagen.png");
  6. // o mostrar
  7. imagepng($img);
  8. imagejpeg($img);
  9. imagegif($img);
  10. imagewbmp($img);

Se justificaría el uso de librerías especiales si fuese para hacer efectos complicados, pero si es solo para escribir un simple texto, usa lo básico de PHP :)
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #4 (permalink)  
Antiguo 23/06/2011, 23:06
 
Fecha de Ingreso: abril-2011
Mensajes: 39
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Código para meter texto en imagen

Muchas gracias, alguna de las 2 cosas me servirá
  #5 (permalink)  
Antiguo 23/06/2011, 23:42
 
Fecha de Ingreso: abril-2011
Mensajes: 39
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Código para meter texto en imagen

Perdón que utilice el mismo post para preguntar algo... Veo que aquí, para dar karma, se utiliza php (al parecer, o esa impresión me da a mí). Siempre he tenido el problema que, para hacer este tipo de encuestas, con el php siempre se me refrescaba la página, y no conseguía que tuviera un funcionamiento fino. Probé algo que me dijeron en este mismo foro, pero no funcionó. ¿Es mucho preguntar qué sistema se utiliza aquí para votar y que no refresque la página?
  #6 (permalink)  
Antiguo 24/06/2011, 10:16
 
Fecha de Ingreso: abril-2011
Mensajes: 39
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Código para meter texto en imagen

Puedo poner texto en imagen y guardarlo todo como imagen, pero hay algo que no me sale... Quiero que, en un campo de texto que he puesto para que cualquiera pueda poner su texto, asociarlo a la variable string del script GD... Dicho de otra manera: Quiero que cualquiera pueda insertar su texto en una imagen que sube cada uno (Lo de que cada uno suba su imagen en principio no me acarrea problema). Y también decir que tengo un form perfectamente creado con su principio y su final. También tengo todas las variables (excepto las del GD) asociadas a una base de datos (quizá una solución sea crear un campo string en DB, pero no creo). Entonces no se me ha ocurrido otra cosa que hacer esto:

Código PHP:
Ver original
  1. <?php
  2. // texto a convertir
  3. if( isset($_GET['string']) && !empty($_GET['string'])) $string = trim($_GET['string']);
  4. else $string = '<input type="text" name="titulo" value="Título" onfocus="if (this.value=='Título') this.value=''" onblur="if (this.value=='') this.value='Título'" size="20" onKeyUp="limita(this,100);" onKeyDown="limita(this,100);"></p>';
  5.  
  6. // tamaño de la imagen
  7. $im = imagecreate(500, 30);
  8.  
  9. // fondo blanco y texto azul
  10. $bg = imagecolorallocate($im, 0, 0, 0);
  11. $textcolor = imagecolorallocate($im, 255, 0, 0);
  12.  
  13. // escribimos el texto en la parte superior-izquierda
  14. imagestring($im, 5, 0, 0, $string, $textcolor);
  15.  
  16. // mostrar la imagen
  17. header("Content-type: image/png");
  18. imagepng($im);
  19. ?>

Me da error en la línea 4 (como no...), pero he probado hacerlo al revés (meterlo en un array que tengo más abajo sustituyendo el [titulo] por [$string] y tampoco ha funcionado. ¿Qué puedo hacer en este caso?

Última edición por konvulsion; 24/06/2011 a las 10:24 Razón: mejorar explicación
  #7 (permalink)  
Antiguo 24/06/2011, 10:28
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Código para meter texto en imagen

A ver, lo que pones en la linea 4 no es texto normal... ¡es HTML!

¿Que pretende colocando HTML como texto en una imagen?

Eso si no tiene nada de sentido...

Para recibir una variable desde un formulario, primero necesitas el formulario.

Te invito a leer lo siguiente:
http://www.php.net/variables.external
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 24/06/2011, 12:43
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 8 meses
Puntos: 336
Respuesta: Código para meter texto en imagen

Hola, lamento no haber podido responder antes, he estado con muuuuuuuuuuucho trabajo XD

El sistema para dar karma del foro es AJAX, que basicamente lo que hace es cargar una página PHP oculta y mostrarla con JS.

en cuanto a la linea 4, debería ser algo así:

else $string = '<input type="text" name="titulo" value="Título" onfocus="if (this.value==\'Título\') this.value=''" onblur="if (this.value=='') this.value=\'Título\'" size="20" onKeyUp="limita(this,100);" onKeyDown="limita(this,100);"></p>';

o sea debes escribir las comillas como \'.

PERO, sería mejor hacerlo así:

Código PHP:
<?php
// texto a convertir
if( isset($_GET['string']) && !empty($_GET['string'])){
$string trim($_GET['string']);
 
// tamaño de la imagen
$im imagecreate(50030);
 
// fondo blanco y texto azul
$bg imagecolorallocate($im000);
$textcolor imagecolorallocate($im25500);
 
// escribimos el texto en la parte superior-izquierda
imagestring($im500$string$textcolor);
 
// mostrar la imagen
header("Content-type: image/png");
imagepng($im);
imagedestroy($im); 

}else{ 
?>
<form name="form1" method="get" action="">
<input type="text" name="string" value="Título" onfocus="if (this.value=='Título') this.value=''" onblur="if (this.value=='') this.value='Título'" size="20" onKeyUp="limita(this,100);" onKeyDown="limita(this,100);">
<input type="submit" name="Submit" value="Enviar">
</form>
<?php ?>
ya que no vale la pena mostrar la imágen si no se ha ingresado texto y tampoco guardar el formulario dentro del $string (como dijo el amo pateketrueke XD), le he puesto como nombre al input "string" tal como lo recibes por GET, tambien he agregado un boton para enviar y un form, suponiendo que es eso lo que quieres hacer.

lo probé y me funciono perfecto :)
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #9 (permalink)  
Antiguo 24/06/2011, 12:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Código para meter texto en imagen

stramin, que bueno que le hayas hecho el trabajo pero ahora mismo me pregunto si habrá entendido.

Seguro vuelve y te agradece, lo cual no está mal, pero bueno... esperemos a ver que nos dice.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 24/06/2011, 13:25
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 8 meses
Puntos: 336
Respuesta: Código para meter texto en imagen

yo comprendo que en este foro siguen eso que dice:

"Da de comer pescado a alguien y le quitarás el hambre por un dia, enseñale a pescar y le quitarás el hambre para siempre"

yo enseño a pescar mostrando como hacerlo y corrigiendo si hace algo mal o podría hacerse mejor, ustedes prefieren solo pasarle un libro (url) y dejan que se las arregle solo, que si bien es útil, también podrían buscar el libro por ellos mismos (google).

si bien es cierto ambas sirven, yo prefiero ir orientando y respondiendo, lo considero mi responsabilidad y cuido cada uno de mis temas mientras el usuario se vea interesado.

Los usuarios vienen aquí buscando ayuda, si les vamos a dar lo mismo que google, que sentido tiene el foro?

deberíamos evitar respuestas como:

Cita:
Lo estás haciendo mal, lee la wiki del foro o el manual de php
y responder más como:

Cita:
Lo estás haciendo mal, deberías hacerlo de esta manera
creo que eso es "brindar soporte", fíjate que yo le dije como hacerlo y el desarrolló su propio código lo mejor que pudo, cometió algunos errores y se los corregí, el ahora puede aprender de esos errores, viendo las diferencias :)
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #11 (permalink)  
Antiguo 24/06/2011, 23:58
 
Fecha de Ingreso: abril-2011
Mensajes: 39
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Código para meter texto en imagen

Bueno, responderé a pateketrueke brevemente:

1- Miro Google y Yahoo, ya que en Yahoo se encuentran ciertas páginas que Google considera piratas (En alusión a un comentario de stramin).

2- Tendría que haber una videocámara grabando a cada uno las 24 horas del día para que se sepa realmente si alguien mueve un dedo para hacer algo o no.

Tengo varios manuales de PHP (entre ellos la Biblia del PHP), de Javascript, de AJAX (no lo utilizo pero me lo bajé). He mirado cientos y cientos de videotutoriales y leídos cientos de foros también (no, no exajero, hablo desde que me dio por querer aprender a principios de año). Hay gente que cree que no tengo ni vida social. Muy listo no soy, hago lo que puedo. He llegado a estar una semana para conseguir algo concreto, pero al no conseguirlo siempre me he puesto a preguntar. ¿Mal hecho? Pues depende... Lo que está claro es que llega un momento que uno se emborracha de información y que ya no sabe por dónde tirar. Entiendo muy bien lo que ha puesto stramin: Se entra al formulario cuando no sucede lo que pone más arriba. A mí también se me hubiera podido haber ocurrido, pero me falta práctica con los "elses" y, en definitiva, para dar a entender al php lo que quiero hacer. Y sí, después de decirme que no puede haber html dentro de php me he dado cuenta enseguida, pero eso es más fácil verlo alguien que entra a un foro y ve un código "totalmente nuevo", a alguien que ha hecho 30 (por decir un número) pruebas antes y ninguna ha dado el resultado esperado. Quizá me falte clarividencia, pero paciencia tengo mucha, puede que inteligencia no tanta, pero eso no es motivo para no seguir avanzando.

Y ahora probaré el script de stramin, entendiendo bien lo que ha hecho (cogiendo la variable string por GET, agrupando una función con el resto, y sacando el formulario si no se cumple la función, o sea, si no se ve la imagen).

Por cierto... Te he dicho que el formulario empieza y termina antes y después del código que he colgado. Para que me entiendas: En la línea del input type he cogido el script GD php y se lo he puesto de manera conveniente (que ahora ya sé que no es la manera que conviene, pero ya digo que hago lo que puedo). Iba a poner todo el código, pero no quiero mostrar mucho lo que quiero hacer, porque estoy haciendo una web, no es simplemente probar por probar.

P.D.: Puede que sea una impresión mía, pero cuando me dio por trastear con Linux parece que la gente se ayude más, aunque también tengo que decir que nunca me he metido en el kernel.
  #12 (permalink)  
Antiguo 25/06/2011, 00:24
 
Fecha de Ingreso: abril-2011
Mensajes: 39
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Código para meter texto en imagen

Me funciona perfectamente, lo que si lo meto en un script largo que tengo me da algunos errores, pero sí, es lo que quería. Supongo que tendré que utilizar más includes para evitar errores de header.
  #13 (permalink)  
Antiguo 26/06/2011, 09:24
 
Fecha de Ingreso: abril-2011
Mensajes: 39
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Código para meter texto en imagen

Código PHP:
Ver original
  1. <?php
  2. // texto a convertir
  3. if( isset($_POST['string']).($_POST['string2']) && !empty($_POST['string']).($_POST['string2'])){
  4. $string = trim($_POST['string']);
  5. $string2 = trim($_POST['string2']);
  6.  
  7. // tamaño de la imagen
  8. $im = imagecreate(500, 300);
  9.  
  10. // fondo blanco y texto azul
  11. $bg = imagecolorallocate($im, 0, 0, 0);
  12. $textcolor = imagecolorallocate($im, 255, 0, 0);
  13. $textcolor2 = imagecolorallocate($im, 255, 255, 255);
  14.  
  15. // escribimos el texto en la parte superior-izquierda
  16. $xCentrado = (imagesx($im) - $cajaTexto[3]) / 2;
  17. $yCentrado = (imagesy($im) - $cajaTexto[2]) / 1.2;
  18. $xCentrado2 = (imagesx($im) - $cajaTexto2[3]) / 2;
  19. $yCentrado2 = (imagesy($im) - $cajaTexto2[2]) / 1.1;
  20. imagettftext($im,25,0,$xCentrado,$yCentrado,$textcolor,"times.ttf",$string);
  21. imagettftext($im,10,0,$xCentrado2,$yCentrado2,$textcolor2,"tahoma.ttf",$string2);
  22.  
  23. // mostrar la imagen
  24. header("Content-type: image/png");
  25. imagepng($im);
  26.  
  27.  
  28. }else{ ?>
  29. <form name="form1" method="post" action="">
  30. <input type="text" style="text-align:center" name="string" value="Título" onfocus="if (this.value=='Título') this.value=''" onblur="if (this.value=='') this.value='Título'" size="20" onKeyUp="limita(this,100);" onKeyDown="limita(this,100);">
  31. <p>
  32. <input type="text" name="string2" style="text-align:center" value="Subtítulo" onfocus="if (this.value=='Subtítulo') this.value=''" onblur="if (this.value=='') this.value='Subtítulo'" size="20" onKeyUp="limita(this,400);" onKeyDown="limita(this,400);"></textarea>
  33. <p>
  34. <input type="submit" name="Submit" value="Enviar">
  35. </form>
  36. <?php } ?>

Esto es lo que hago para que el texto me quede centrado... Lo malo es que no me acaba de funcionar con el GET (que al final le he puesto POST porque terminaré pasándolo por post). Sí que me funciona si lo hago de esta manera, pero sin enviar por URL:

Código PHP:
Ver original
  1. <?php
  2. header("Content-type: image/png");
  3. $im = imagecreatetruecolor(500, 300);
  4. $color = imagecolorallocate($im, 255, 0, 0);
  5. $color2 = imagecolorallocate($im, 255, 255, 255);
  6. $fuente = "times.ttf";
  7. $fuente2 = "tahoma.ttf";
  8. $cajaTexto = imagettfbbox(25, 0, $fuente, "Título");
  9. $cajaTexto2 = imagettfbbox(10, 0, $fuente2, "Subtítulo");
  10. $xCentrado = (imagesx($im) - $cajaTexto[2]) / 2;
  11. $yCentrado = (imagesy($im) - $cajaTexto[2]) / 1;
  12. $xCentrado2 = (imagesx($im) - $cajaTexto2[2]) / 2;
  13. $yCentrado2 = (imagesy($im) - $cajaTexto2[2]) / 1;
  14. imagettftext($im, 25, 0, $xCentrado, $yCentrado, $color, $fuente, "Título");
  15. imagettftext($im, 10, 0, $xCentrado2, $yCentrado2, $color2, $fuente2, "Subtítulo");
  16. imagepng($im);
  17. ?>

He intentado adaptarlo lo mejor que he podido, pero no hay manera. ¿Acaso ahora tengo que aplicar la función de diferente manera?
  #14 (permalink)  
Antiguo 28/06/2011, 09:12
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 8 meses
Puntos: 336
Respuesta: Código para meter texto en imagen

vaya, sinceramente me impresiona que hayas llegado tan lejos, entendiste bien el concepto de las cajas de texto para centrar.

bueno, el problema que tienes seguramente es por las tildes, resulta que el sistema GD no usa html para los textos, por lo que debes cambiar la codificación del texto, para esto en el manual de php alguien publicó una conveniente funcion llamada foxy que cambia el formato a utf-8.

la función no la he podido encontrar pero tengo una que copié hace tiempo y no recuerdo si la he modificado pero funciona:

FOXY UTF8 TO NCE
Código PHP:
function foxy_utf8_to_nce$utf '' ) {
    if(
$utf == '') return($utf);
    
$max_count 5;
    
$max_mark 248;
    
$html '';
    for(
$str_pos 0$str_pos strlen($utf); $str_pos++) {
        
$old_chr $utf{$str_pos};
        
$old_val ord$utf{$str_pos} );
        
$new_val 0;
        
$utf8_marker 0;
        if( 
$old_val 127 ) {
            
$mark $max_mark;
            for(
$byte_ctr $max_count$byte_ctr 2$byte_ctr--) {
                if( ( 
$old_val $mark  ) == ( ($mark << 1) & 255 ) ) {
                    
$utf8_marker $byte_ctr 1;
                    break;
                }
                
$mark = ($mark << 1) & 255;
            }
        }
        if(
$utf8_marker and isset( $utf{$str_pos 1} ) ) {
            
$str_off 0;
            
$new_val $old_val & (127 >> $utf8_marker);
            for(
$byte_ctr $utf8_marker$byte_ctr 1$byte_ctr--) {
                if( (
ord($utf{$str_pos 1}) & 192) == 128 ) {
                    
$new_val $new_val << 6;
                    
$str_off++;
                    
$new_val $new_val | ( ord$utf{$str_pos $str_off} ) & 63 );
                }
                else {
                    
$new_val $old_val;
                }
            }
            
$html .= '&#'.$new_val.';';
            
$str_pos $str_pos $str_off;
        }else{
            
$html .= chr($old_val);
            
$new_val $old_val;
        }
    }
    return(
$html);

no tengo el nombre del creador pero aparece como "limalopex.eisfux.de"

se usa así:

foxy_utf8_to_nce("título");

ve si eso soluciona el problema :)
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #15 (permalink)  
Antiguo 28/06/2011, 13:12
 
Fecha de Ingreso: abril-2011
Mensajes: 39
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Código para meter texto en imagen

Stramin, me ha funcionado el script, pero es sólo para evitar caracteres extraños... y yo en eso no tengo problema. Ahora lo alucinante es que hace 2 o 3 días que tengo un código que me centra el texto... pero dependiendo del número de letras. O sea, de horizontal me lo centra a la perfección, pero de vertical se coloca el string donde quiere. Quizá la clave está en el strlen ese, que creo que coloca el string en la pantalla dependiendo de la largada del string, pero he intentado ponerlo de varias maneras y eso es un festival de errores. El código es este:

Código PHP:
Ver original
  1. <?php
  2. // texto a convertir
  3. if( isset($_GET['string']).($_GET['string2']) && !empty($_GET['string']).($_GET['string2'])){
  4. $string = trim($_GET['string']);
  5. $string2 = trim($_GET['string2']);
  6.  
  7. // tamaño de la imagen
  8. $im = imagecreatetruecolor(500, 300);
  9. $im = imagecreatefromPng("dibujos/ejemplo2.jpg");
  10. // fondo blanco y texto azul
  11. $bg = imagecolorallocate($im, 0, 0, 0);
  12. $textcolor = imagecolorallocate($im, 255, 0, 0);
  13. $textcolor2 = imagecolorallocate($im, 255, 255, 255);
  14.  
  15. // escribimos el texto en la parte superior-izquierda
  16. imagerectangle($im, 35, 35, 464, 464, $textcolor);
  17. $cajaTexto = imagettfbbox(25, 0, "times.ttf", $string);
  18. $cajaTexto2 = imagettfbbox(10, 0, "tahoma.ttf", $string2);
  19. $xCentrado = (imagesx($im) - $cajaTexto[2]) / 2;
  20. $yCentrado = (imagesy($im) - $cajaTexto[3]) / 2;
  21. $xCentrado2 = (imagesx($im) - $cajaTexto2[2]) / 2;
  22. $yCentrado2 = (imagesy($im) - $cajaTexto2[3]) / 2;
  23. imagettftext($im,25,0,$xCentrado, $yCentrado, $textcolor,"times.ttf",$string);
  24. imagettftext($im,10,0,$xCentrado2, $yCentrado2, $textcolor2,"tahoma.ttf",$string2);
  25.  
  26. // mostrar la imagen
  27. header("Content-type: image/png");
  28. imagepng($im);
  29.  
  30. }else{ ?>
  31. <form action="" align="left" name="form1" method="get" enctype="multipart/form-data">
  32. <p><left><input name="imagen" type="file" size="20"></left></p>
  33. <input type="text" style="text-align:center" name="string" value="Título" onfocus="if (this.value=='Título') this.value=''" onblur="if (this.value=='') this.value='Título'" size="20" onKeyUp="limita(this,100);" onKeyDown="limita(this,100);">
  34. <p>
  35. <input type="text" name="string2" style="text-align:center" value="Subtítulo" onfocus="if (this.value=='Subtítulo') this.value=''" onblur="if (this.value=='') this.value='Subtítulo'" size="20" onKeyUp="limita(this,400);" onKeyDown="limita(this,400);"></textarea>
  36. <p>
  37. <input type="submit" name="Submit" value="Enviar">
  38. </form>
  39. <?php } ?>

Ya me estoy liando con querer que suban una imagen aparte de la que se crea con php, pero no consigo que no me dé error. Sí que veo la que pongo directamente en el código, pero se trata de visualizar lo que saque el input (Pero bueno, estoy investigando, a ver qué consigo... Lo de centrar mejor lo dejo para lo último).

Ni caso de los echos, eso me servía a mí al principio.
  #16 (permalink)  
Antiguo 28/06/2011, 13:28
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 8 meses
Puntos: 336
Respuesta: Código para meter texto en imagen

ten en cuenta que solo estás tomando el punto inferior derecho, si pones mas de una linea no sabrás cuando tiene de altura solo tomando ese punto, intenta restar los inferiores tambien:

$xCentrado = (imagesx($im) - $cajaTexto[2] - $cajaTexto[0]) / 2;
$yCentrado = (imagesy($im) - $cajaTexto[3] - $cajaTexto[5]) / 2;
$xCentrado2 = (imagesx($im) - $cajaTexto2[2] - $cajaTexto[0]) / 2;
$yCentrado2 = (imagesy($im) - $cajaTexto2[3] - $cajaTexto[5]) / 2;

no se si funciona, voy a probar XD

por cierto estás creando un png a partir de un jpg:

$im = imagecreatefromPng("dibujos/ejemplo2.jpg");

debería ser

$im = imagecreatefromjpeg("dibujos/ejemplo2.jpg");

------------------------edit----------------------

ya, probé y si funciona, claro que como ambos textos estan centrados aparece uno sobre otro, lo otro es que la posicion y empieza desde la base de la letra (abajo), así que en vez de restar habría que sumar:

$xCentrado = (imagesx($im) - $cajaTexto[2] - $cajaTexto[0]) / 2;
$yCentrado = (imagesy($im) + $cajaTexto[3] - $cajaTexto[5]) / 2;
$xCentrado2 = (imagesx($im) - $cajaTexto2[2] - $cajaTexto2[0]) / 2;
$yCentrado2 = (imagesy($im) + $cajaTexto2[3] - $cajaTexto2[5]) / 2;
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D

Última edición por stramin; 28/06/2011 a las 14:36
  #17 (permalink)  
Antiguo 29/06/2011, 17:39
 
Fecha de Ingreso: abril-2011
Mensajes: 39
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Código para meter texto en imagen

Uff, Dios santo...

No lo hubiera adivinado nunca, pensaba que no hacían falta más cajas de texto.

Vale, perfecto, sólo había que subir un dígito y ya está todo bien.

Última edición por konvulsion; 29/06/2011 a las 19:56
  #18 (permalink)  
Antiguo 01/07/2011, 05:47
 
Fecha de Ingreso: abril-2011
Mensajes: 39
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Código para meter texto en imagen

A ver, intento hacer esto:

Archivo my_file.php:

Código PHP:
Ver original
  1. <form enctype="multipart/form-data" method="post" action="image_upload_script.php">
  2. Choose your file here:
  3. <input name="uploaded_file" type="file"/><br /><br />
  4. <input type="submit" value="Upload It"/>
  5. </form>

Archivo image_upload_script.php:

Código PHP:
Ver original
  1. <?php
  2. // Access the $_FILES global variable for this specific file being uploaded
  3. // and create local PHP variables from the $_FILES array of information
  4. $fileName = $_FILES["uploaded_file"]["name"]; // The file name
  5. $fileTmpLoc = $_FILES["uploaded_file"]["tmp_name"]; // File in the PHP tmp folder
  6. $fileType = $_FILES["uploaded_file"]["type"]; // The type of file it is
  7. $fileSize = $_FILES["uploaded_file"]["size"]; // File size in bytes
  8. $fileErrorMsg = $_FILES["uploaded_file"]["error"]; // 0 for false... and 1 for true
  9. $fileName = preg_replace('#[^a-z.0-9]#i', '', $fileName); // filter
  10. $kaboom = explode(".", $fileName); // Split file name into an array using the dot
  11. $fileExt = end($kaboom); // Now target the last array element to get the file extension
  12.  
  13. // START PHP Image Upload Error Handling -------------------------------
  14. if (!$fileTmpLoc) { // if file not chosen
  15.     echo "ERROR: Please browse for a file before clicking the upload button.";
  16.     exit();
  17. } else if($fileSize > 5242880) { // if file size is larger than 5 Megabytes
  18.     echo "ERROR: Your file was larger than 5 Megabytes in size.";
  19.     unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder
  20.     exit();
  21. } else if (!preg_match("/\.(gif|jpg|png)$/i", $fileName) ) {
  22.      // This condition is only if you wish to allow uploading of specific file types    
  23.      echo "ERROR: Your image was not .gif, .jpg, or .png.";
  24.      unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder
  25.      exit();
  26. } else if ($fileErrorMsg == 1) { // if file upload error key is equal to 1
  27.     echo "ERROR: An error occured while processing the file. Try again.";
  28.     exit();
  29. }
  30. // END PHP Image Upload Error Handling ---------------------------------
  31. // Place it into your "uploads" folder mow using the move_uploaded_file() function
  32. $moveResult = move_uploaded_file($fileTmpLoc, "uploads/$fileName");
  33. // Check to make sure the move result is true before continuing
  34. if ($moveResult != true) {
  35.     echo "ERROR: File not uploaded. Try again.";
  36.     exit();
  37. }
  38. // Include the file that houses all of our custom image functions
  39. include_once("ak_php_img_lib_1.0.php");
  40. // ---------- Start Adams Universal Image Resizing Function --------
  41. $target_file = "uploads/$fileName";
  42. $resized_file = "uploads/resized_$fileName";
  43. $wmax = 500;
  44. $hmax = 500;
  45. ak_img_resize($target_file, $resized_file, $wmax, $hmax, $fileExt);
  46. // ----------- End Adams Universal Image Resizing Function ----------
  47. // ---------- Start Adams Convert to JPG Function --------
  48. if (strtolower($fileExt) != "jpg") {
  49.     $target_file = "uploads/resized_$fileName";
  50.     $new_jpg = "uploads/resized_".$kaboom[0].".jpg";
  51.     ak_img_convert_to_jpg($target_file, $new_jpg, $fileExt);
  52. }
  53. // ----------- End Adams Convert to JPG Function -----------
  54. // ---------- Start Adams Image Watermark Function --------
  55. $target_file = "uploads/resized_".$kaboom[0].".jpg";
  56. $wtrmrk_file = "watermark.png";
  57. $new_file = "uploads/protected_".$kaboom[0].".jpg";
  58. ak_img_watermark($target_file, $wtrmrk_file, $new_file);
  59. // ----------- End Adams Image Watermark Function -----------
  60. // Display things to the page so you can see what is happening for testing purposes
  61. echo "The file named <strong>$fileName</strong> uploaded successfuly.<br /><br />";
  62. echo "It is <strong>$fileSize</strong> bytes in size.<br /><br />";
  63. echo "It is an <strong>$fileType</strong> type of file.<br /><br />";
  64. echo "The file extension is <strong>$fileExt</strong><br /><br />";
  65. echo "The Error Message output for this upload is: $fileErrorMsg";
  66. ?>

Archivo ak_php_img_lib_1.0.php:

Código PHP:
Ver original
  1. <?php
  2. // Adam Khoury PHP Image Function Library 1.0
  3. // ----------------------- RESIZE FUNCTION -----------------------
  4. // Function for resizing any jpg, gif, or png image files
  5. function ak_img_resize($target, $newcopy, $w, $h, $ext) {
  6.     list($w_orig, $h_orig) = getimagesize($target);
  7.     $scale_ratio = $w_orig / $h_orig;
  8.     if (($w / $h) > $scale_ratio) {
  9.            $w = $h * $scale_ratio;
  10.     } else {
  11.            $h = $w / $scale_ratio;
  12.     }
  13.     $img = "";
  14.     $ext = strtolower($ext);
  15.     if ($ext == "gif"){
  16.     $img = imagecreatefromgif($target);
  17.     } else if($ext =="png"){
  18.     $img = imagecreatefrompng($target);
  19.     } else {
  20.     $img = imagecreatefromjpeg($target);
  21.     }
  22.     $tci = imagecreatetruecolor($w, $h);
  23.     // imagecopyresampled(dst_img, src_img, dst_x, dst_y, src_x, src_y, dst_w, dst_h, src_w, src_h)
  24.     imagecopyresampled($tci, $img, 0, 0, 0, 0, $w, $h, $w_orig, $h_orig);
  25.     if ($ext == "gif"){
  26.         imagegif($tci, $newcopy);
  27.     } else if($ext =="png"){
  28.         imagepng($tci, $newcopy);
  29.     } else {
  30.         imagejpeg($tci, $newcopy, 84);
  31.     }
  32. }
  33. // -------------- THUMBNAIL (CROP) FUNCTION ---------------
  34. // Function for creating a true thumbnail cropping from any jpg, gif, or png image files
  35. function ak_img_thumb($target, $newcopy, $w, $h, $ext) {
  36.     list($w_orig, $h_orig) = getimagesize($target);
  37.     $src_x = ($w_orig / 2) - ($w / 2);
  38.     $src_y = ($h_orig / 2) - ($h / 2);
  39.     $ext = strtolower($ext);
  40.     $img = "";
  41.     if ($ext == "gif"){
  42.     $img = imagecreatefromgif($target);
  43.     } else if($ext =="png"){
  44.     $img = imagecreatefrompng($target);
  45.     } else {
  46.     $img = imagecreatefromjpeg($target);
  47.     }
  48.     $tci = imagecreatetruecolor($w, $h);
  49.     imagecopyresampled($tci, $img, 0, 0, $src_x, $src_y, $w, $h, $w, $h);
  50.     if ($ext == "gif"){
  51.         imagegif($tci, $newcopy);
  52.     } else if($ext =="png"){
  53.         imagepng($tci, $newcopy);
  54.     } else {
  55.         imagejpeg($tci, $newcopy, 84);
  56.     }
  57. }
  58. // ----------------------- IMAGE CONVERT FUNCTION -----------------------
  59. // Function for converting GIFs and PNGs to JPG upon upload
  60. function ak_img_convert_to_jpg($target, $newcopy, $ext) {
  61.     list($w_orig, $h_orig) = getimagesize($target);
  62.     $ext = strtolower($ext);
  63.     $img = "";
  64.     if ($ext == "gif"){
  65.         $img = imagecreatefromgif($target);
  66.     } else if($ext =="png"){
  67.         $img = imagecreatefrompng($target);
  68.     }
  69.     $tci = imagecreatetruecolor($w_orig, $h_orig);
  70.     imagecopyresampled($tci, $img, 0, 0, 0, 0, $w_orig, $h_orig, $w_orig, $h_orig);
  71.     imagejpeg($tci, $newcopy, 84);
  72. }
  73. // ----------------------- IMAGE WATERMARK FUNCTION -----------------------
  74. // Function for applying a PNG watermark file to a file after you convert the upload to JPG
  75. function ak_img_watermark($target, $wtrmrk_file, $newcopy) {
  76.     $watermark = imagecreatefrompng($wtrmrk_file);
  77.     imagealphablending($watermark, false);
  78.     imagesavealpha($watermark, true);
  79.     $img = imagecreatefromjpeg($target);
  80.     $img_w = imagesx($img);
  81.     $img_h = imagesy($img);
  82.     $wtrmrk_w = imagesx($watermark);
  83.     $wtrmrk_h = imagesy($watermark);
  84.     $dst_x = ($img_w / 2) - ($wtrmrk_w / 2); // For centering the watermark on any image
  85.     $dst_y = ($img_h / 2) - ($wtrmrk_h / 2); // For centering the watermark on any image
  86.     imagecopy($img, $watermark, $dst_x, $dst_y, 0, 0, $wtrmrk_w, $wtrmrk_h);
  87.     imagejpeg($img, $newcopy, 100);
  88.     imagedestroy($img);
  89.     imagedestroy($watermark);
  90. }
  91. ?>

Se supone que es exactamente lo que quiero, insertar un dibujo que se me visualiza junto con una marca de agua (no hay strings, pero supongo que no costaría nada ponerlos). El problema es que no consigo que se me suba bien el dibujo sin un maldito mensaje de error, y eso que hay un video explicativo y todo aparte que he visto, pero yo veo que está todo igual. No quiero hacerme pesado, si tengo que ofrecer dinero lo ofrezco, 20 o 30 euros, pero es que llega un momento que ya no sé qué sustituir por qué, si sustituyo el uploads por mi directorio de destino da los mismos errores. Necesitaré alguien que me explique las cosas como los niños pequeños (y pensar que he sido capaz de entender cómo se hace un blog multinivel con bases de datos relacionadas y todo, pero es que con la movida esta del GD no puedo).

http://www.youtube.com/watch?v=PFSkPzJNAho (Este es el video, por si veis algo raro que no está en los script)

Última edición por konvulsion; 01/07/2011 a las 05:53
  #19 (permalink)  
Antiguo 08/07/2011, 06:15
 
Fecha de Ingreso: abril-2011
Mensajes: 39
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Código para meter texto en imagen

Bueno, a ver, me sale lo del watermark, yo lo que quiero hacer es un watermark que me sirva de marco para la imagen, y parece que lo he conseguido. La imagen "de atrás" se visualiza a través de la parte transparente, en principio ningún problema.

Ahora bien, resulta que yo quiero que el marco se expanda a lo largo (de arriba a abajo) dependiendo del tamaño del "dibujo standard". He mirado la documentación http://php.net/manual/es/book.image.php y parece que no es algo que se pueda hacer con puro código GD. ¿Entonces qué puedo hacer?

http://phpcastellano.com/function.imagecopyresampled.html

Por aquí voy bien, ¿¿verdad??

Última edición por konvulsion; 08/07/2011 a las 14:44

Etiquetas: libreria, libreriagd, librerías, textos
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 10:51.