imágenes

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! 😀

 Scroll to top