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