Leyendo la entrada sobre el Generador de Portadas: For Dummies, se me ha ocurrido hacer la mía propia y lógicamente explicar cómo funciona.
Tan solo necesitamos 4 cosas: una imagen de fondo, una imagen que se pondrá encima del la anterior y del texto (para evitar en este caso que se escriba encima de la cabeza de Bart), una fuente True Type y un script PHP, que abrirá la imagen de fondo, escribirá encima, colocará sobre el texto la otra imagen y devolverá la imagen final.
Como ya hemos dicho, necesitamos dos imagenes, en este caso tienen que ser dos, porque nos podemos encontrar en el caso de que se escriba sobre la cabeza de Bart. Por eso, una de las imagenes es en la que se escribe y la otra es la que se usa para "proteger" la imagen (tiene que ser igual que la imagen del fondo, salvo que la zona de la pizarra tiene que ser una zona transparente).
El script PHP debe abrir ambas imágenes, escribir el texto en la pizarra (calculando cuantas líneas admite y cuantas frases entran en una línea) y luego devolver la imagen.
<?php // Obtengo el texto $texto = isset($_GET["texto"])? $_GET["texto"]: "Visitaré display: NONE a diario."; $texto .= " "; $ancho_caja = 395; $alto_caja = 180; // Establecer el tipo de contenido header("Content-type: image/png"); // Abro las imagenes $im = imagecreatefrompng('bart1.png'); $im2 = imagecreatefrompng('bart2.png'); // Creo el color del texto $blanco = imagecolorallocate($im, 255, 255, 255); // Obtengo la fuente $fuente = './ALPHMA__.TTF'; // Calculo el numero de lineas que entran $caja_texto = imagettfbbox(18, 0, $fuente , $texto); $alto_linea = abs($caja_texto[7]-$caja_texto[1]); $num_lineas = intval($alto_caja / $alto_linea); // Calculo cuantas frases entran en el ancho de la pizarra $texto_linea = ""; $caja_texto = imagettfbbox(18, 0, $fuente , $texto_linea.substr($texto, $pos, 1)); while (abs($caja_texto[2]-$caja_texto[0]) < $ancho_caja) { $texto_linea .= substr($texto, $pos, 1); $caja_texto = imagettfbbox(18, 0, $fuente , $texto_linea.substr($texto, $pos, 1)); $pos = ($pos+1) % strlen($texto); } $texto_linea = str_repeat($texto, intval(strlen($texto_linea)/strlen($texto))); // Escribo las lineas $pos = 0; for ($i = 0; $i<$num_lineas; $i++) { imagettftext($im, 18, 0, 20, 33+$alto_linea*$i, $blanco, $fuente , $texto_linea); } // Dibujo la imagen imagealphablending($im, 1); imagealphablending($im2, 1); imagecopy($im, $im2, 0, 0, 0, 0, imagesx($im), imagesy($im)); imagepng($im); imagedestroy($im); imagedestroy($im2); ?>
escrito por Luis a las 4/06/2006 08:55:00 p. m.
4 Comentarios:
Interesantísima la forma de hacerlo, más cosas de este estilo son las que hacen falta.
Por Anónimo, a las 4/07/2006 08:48:00 p. m.
Esto es como el anuncio de Acnur (creo que era de Acnur) en el que aparecía Lady Di, mis motivos son más superficiales y con Bart Simpson me vale.
Por Anónimo, a las 4/07/2006 08:57:00 p. m.
Te ha quedado muy bien el texto, te enlazo desde SigT ^_^U (lastima de trackbacks en Blogger)...
Por Anónimo, a las 4/09/2006 02:24:00 a. m.
Gracias, jeje, pero me parece que no tiene mucho efecto el texto, la gente sigue haciendo lo que quiere.
Por Anónimo, a las 4/09/2006 10:47:00 a. m.
Publicar un comentario
<< Inicio