Generar imagenes al vuelo
Como todos sabeis, yo no soy diseñador, pero si me gusta trastear con el diseño a la hora de hacer paginas web, y muchas veces, necesito una imagen de cierto tamaño para color en la cabecera o para hacer un slider, para asi ver como queda en conjunto todo eso. Pero no siempre tengo un diseñador a mano, ni me apetece usar ningun programa para hacer las imagenes.
Asi que he decidido hacerme un ‘generador de imagenes’ para poder agregar a mi web y asi dejar el espacio para la foto final o ver como quedaria todo en conjunto.
El codigo seria:
<? //primero definimos las distintas variables //Directorio para generar una pequeña cache, asi no tenemos que generar siempre la imagen $cacheDir = '/home/errante/el-maldito.com/www/i/cache/'; //Tamaños por defecto define('ANCHO', 150); define('ALTO', 150); //Datos de la letra $fuente = "arial.ttf"; $size = 20; //Tamaño de la fuente //calculamos el archivo que generaremos $hash = md5($_SERVER['QUERY_STRING']); $archivoCache = $cacheDir.$hash.'.png'; //Si ya tenemos el archivo lo servimos if(file_exists($archivoCache)) { header ('Content-Type: image/png'); readfile($archivoCache); die; } //Si llega aqui es que no tenemos el archivo generado, asi que empieza la fiesta =) //Obtenemos todos los datos del _GET // w => Ancho, h => Alto, t => Texto que queremos, c => Color de la imagen $ancho = isset($_GET['w'])?$_GET['w']:ANCHO; $alto = isset($_GET['h'])?$_GET['h']:ALTO; $texto = isset($_GET['t'])?$_GET['t']:''; $color = isset($_GET['c'])?$_GET['c']:''; //Función para obtener el valor RGB numero de uno Hexadecimal function hex2rgb($hex) { $rgb[0]=hexdec(substr($hex,0,2)); $rgb[1]=hexdec(substr($hex,2,2)); $rgb[2]=hexdec(substr($hex,4,2)); return($rgb); } //Sacamo el codigo rgb del color $rgb = hex2rgb($color); $rgbInv = array(); //y el inverso para el texto (para que se vea bien) foreach($rgb as $col) $rgbInv[] = (255 - $col); //creamos la imagen y la pintamos del color correspondiente $im = imagecreatetruecolor($ancho, $alto); $color = imagecolorallocate($im, $rgb[0], $rgb[1], $rgb[2]); imagefill($im, 0, 0, $color); //Calculamos el tamaño del texto $caracteres = strlen($texto); $textoAlto = imagefontheight($size); $textoAncho = imagefontwidth($size) * $caracteres; //y la posicion $x = round(($ancho - $textoAncho) / 2); $y = round(($alto - $textoAlto) / 2); //pintamos el texto $color2 = imagecolorallocate($im, $rgbInv[0], $rgbInv[1], $rgbInv[2]); imagettftext($im, $size, 0, $x, $y, $color2, $fuente, $texto); //guardamos una cache imagepng($im, $archivoCache); //mostramos la imagen header ('Content-Type: image/png'); imagepng($im); imagedestroy($im);
La manera de usarlo seria:
http://domino/ruta/hasta/el/php?w=320&h=200&c=abcabc&t=ejemplo
Y quedaria:
A disfrutarlo! 😀