Zend Framework

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

Zend Framework

En los últimos años el desarrollo web esta creciendo muchísimo, por ello ha habido un gran crecimiento de opciones y herramientas para comenzar un nuevo desarrollo. Muchas veces un desarrollador pierde mucho tiempo intentando buscar la herramienta necesaria para hacer cierto tipo de tareas y luego necesita tener que aprender a usar esa herramienta.
Yo que me incluyo dentro de esa lista de desarrolladores, que llevo muchos años haciendo desarrollos web en PHP, siempre me hacia mis propias utilidades, adaptaba el trabajo de otros, o incluía mini librerías para realizar las tareas mas comunes (acceso a base de datos, envíos de mails, generar pdfs). Hasta que llegado un momento decidí no reinventar mas la rueda y empezar a usar algo, una base que se encargasen otros de actualizar y ampliar. Probé varios frameworks, bastante buenos todos ellos, pero al final me decante por el nuevo Zend Framework ya que era el que cuadra con las exigencias que tengo en mi día a día con la programación.

El Zend Framework es muy parecido al Framework PEAR (que también use durante mucho tiempo) pero mas orientado a “Web 2.0”. Apoya la estructura Modelo-Vista-Controlador (MVC), lleva gerador de formularios, gestión de archivos de configuración, acceso a base de datos, correo, archivos, fechas, y un largo etcétera.
Aparte de eso es muy versátil ya que sus componentes también funcionan ‘solos’ y son fáciles de integrar en otros frameworks.

Después de mas de dos años usándolo, voy a empezar a escribir como utilizar algunas cosas para hacernos la vida mas simple a los que usamos este Framework.

Alarmas Sms (gracias a google)

Hola el otro día vi en el blog de Ivan López como usaba las alarmas del google calendar, para enviarse SMS al móvil con ‘alertas’, y así poder tener controlado sus servidores.
El ‘problema’, es que esta en java, así que decidí hacer lo mismo pero en php, para que mas gente pudiese usarlo.

El modo de empleo es el mismo, necesitas PHP 5.1.4 o superior (son las necesarias para usar la API) y las librerías ZEND de Gdata.

Para mas información del uso de la API se puede mirar directamente a la web de google code.

/*
** Generador de alertas sms a traves de google
** Basado en el de Ivan Lopez (lopezivan.blogspot.com)
** Elias Badenes, 2007
** elias (at) badenes (dot) es
*/
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');

function crearAlerta($cliente, $texto) {
$dia  = date('Y-m-d');
$hIni = date('H:i', strtotime('now +6 minutes'));
$hFin = date('H:i', strtotime('now +7 minute'));

$gdataCal = new Zend_Gdata_Calendar($cliente);
$evento   = $gdataCal->newEventEntry();
$startDate = $dia;
$endDate   = $dia;
$tzOffset  = '+02'; //en verano '+02' en invierno '+01'
$startTime = $hIni;
$endTime   = $hFin;

//asigno el texto
$evento->title = $gdataCal->newTitle($texto);

//Asigno el tiempo
$cuando = $gdataCal->newWhen();
$cuando->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00";
$cuando->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00";

//alerta sms
$metodo = 'sms'; //alert, email o sms
$alerta = $gdataCal->newReminder();
$alerta->setMinutes(5);
$alerta->setMethod('sms');
$cuando->setReminders(array($alerta));

$evento->when = array($cuando);

echo 'Insertando Alerta: '.$texto."\n";
$a = $gdataCal->insertEvent($evento);
}

if(count($argv) < 4) {
echo "Uso: $argv[0] <usuario> <password> <texto>\n";
die();
}

$usuario  = $argv[1];
$password = $argv[2];
$texto    = '';
$argc     = count($argv);

for( $i=3; $i>$argc; $i++) {
$texto .= $argv[$i].' ';
}

$servicio = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$cliente  = Zend_Gdata_ClientLogin::getHttpClient($usuario, $password, $servicio);
crearAlerta($cliente, trim($texto));

Espero que lo disfruteis.

 Scroll to top