Documente Academic
Documente Profesional
Documente Cultură
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8" />
<title>Curso PHP 5</title>
</head>
<body>
<h1>Curso PHP 5</h1>
</body>
</html>
1
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Hasta aquí, nada nuevo. Sin embargo, HTML5 soluciona, entre otras cosas, la
falta de un criterio para definir el contenido semántico de una página web
agregando una serie de etiquetas destinadas a facilitar la estructura del
documento desde el punto de vista de su significado.
Estas nuevas etiquetas permiten varios niveles de anidamiento entre sí. Por
ejemplo, un bloque <section> debe tener un <header> y un <footer>, además de
los <article> necesarios. Además, es posible definir otros bloques <section> en
su interior.
2
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Según el estándar HTML4, un documento sólo “debía” tener una cabecera <H1>
(titular de primer nivel), pero con la llegada de HTML5 esto ha cambiado y se
permite el uso de una cabecera <H1> para cada una de las etiquetas semánticas
básicas, es decir, dentro de <section> y <article>.
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8" />
<title><?php echo 'Curso PHP 5'; ?></title>
</head>
<body>
<header>
<h1><?php echo 'Curso PHP 5'; ?></h1>
</header>
<section>
<article>
<h2><?php echo 'Ejemplo del curso'; ?></h2>
<?php echo 'Página realizada en PHP con
HTML5'; ?>
</article>
</section>
<aside>
<h3><?php echo 'Enlaces relacionados';?></h3>
<ul>
<li><a href="http://www.aulamentor.es/"
target="_blank">
<?php echo 'Aula Mentor'; ?></a></li>
<li><a href="http://www.aulamentor09.blogspot.com.es/"
target="_blank">
<?php echo 'Blog Aula Mentor'; ?></a></li>
</ul>
</aside>
<footer>
<?php echo 'Mentor 2014'; ?>
</footer>
</body>
</html>
En este sencillo ejemplo podemos ver cómo utilizamos la etiqueta <header> para
establecer el titular de la página, la etiqueta <footer> para añadir la información
de la autoría, la etiqueta <aside> para incluir información secundaria y la
combinación de <section> y <article> para colocar el contenido principal de la
página.
3
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
El código de PHP se encuentra, como siempre, entre las etiquetas <?php y ?>.
Esto no es del todo eficiente y práctico por lo que, en la Unidad 5,
estudiaremos cómo estructurar este código siguiendo el patrón MVC (Modelo,
Vista, Controlador), si bien por ahora nos permitimos esta licencia.
Como una imagen vale más que mil palabras, aquí puedes ver el resultado de
la sencilla página anterior al ejecutarla en el servidor XAMPP:
4
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
5
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Las coordenadas dentro de una imagen siempre son positivas y el píxel (0,0)
corresponde a la esquina superior izquierda. Hay que tener en cuenta que, en
una imagen cuyas dimensiones son 400 x 150 pixeles, el píxel de la esquina
inferior derecha corresponde a las coordenadas (399, 149), ya que el primer
píxel (en la esquina superior izquierda) no corresponde a las coordenadas
(1,1), sino a (0,0).
Color
Para poder pintar algo en una imagen es necesario definir algún color
previamente, por ejemplo, para dibujar un rectángulo, hay que definir las
coordenadas de dicho rectángulo así como su color.
6
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
$color_azul = ImageColorAllocate($imagen,0,0,255);
$color_blanco = ImageColorAllocate($imagen,255,255,255);
$color_violeta = ImageColorAllocate($imagen,192,192,255);
La siguiente imagen muestra una paleta básica de colores y sus valores RGB
correspondientes:
ImageFilledRectangle($imagen,0,0,400,150,$color_azul);
ImageFilledRectangle($imagen,200,20,380,130,$color_violeta);
Puntos
imagesetpixel($imagen,0,0,$negro);
La función imagesetpixel (id. imagen, x1, y1, id. color) dibuja un píxel
del color especificado comenzando en la coordenada x1,y1.
Borde
Por dentro del rectángulo más grande que hemos rellenado de color azul
dibujamos una línea de forma rectangular a modo de reborde:
ImageRectangle($imagen,5,10,390,140,$color_blanco);
7
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
La función ImageRectangle(id. imagen, x1, y1, x2, y2, id. color) dibuja
un rectángulo del color especificado comenzando en la coordenada superior
izquierda x1,y1 y acabando en la coordenada inferior derecha x2,y2. 0,0 es la
esquina superior izquierda del rectángulo.
Texto
Dentro de la imagen podemos incluir un texto fijo o que pasemos desde otra
página en la que el usuario lo ha escrito a través de un formulario, como
sucede en este ejemplo. En todo caso, hay que cuidar que el tamaño de la
imagen sea adecuado al texto que se quiere mostrar en la misma.
ImageString($imagen,5,245,72,"(avanzado)",$color_azul);
En este paso, como es lógico, pueden incluirse muchas cosas más, a medida
del usuario, para que la imagen resulte más llamativa, completa o
estéticamente más acertada.
imagepng($imagen);
C:\xampp\php\logs\php_error_log
8
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Puedes acceder a este fichero con cualquier editor de texto plano y ver el
contenido del mismo para encontrar los errores de la generación de la imagen.
ImageDestroy($imagen);
9
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
10
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Esta función debe usarse cuando se quiere partir de cero, es decir, cuando se
crea una imagen que antes no existía. En el Ejemplo 2 también se usa esta
función. A la vez que el alumno lo comprueba, mire cómo creamos una imagen
sencilla que representa un termómetro. En este ejercicio se utilizan, además,
otras funciones que explicaremos después y que sirven para diseñar imágenes,
en este caso la del termómetro. Estudiando el código de este ejercicio el
alumno o alumna puede ver en la práctica cómo se escribe la sintaxis de las
diferentes instrucciones.
Hay también funciones que permiten crear o modificar una imagen a partir
de otra ya existente, archivada en un fichero, o desde una URL. Veamos
algunas de las más usadas.
11
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
<?php
function CargarJpeg($imagen)
{
/* Intentar abrir */
$im = @imagecreatefromjpeg($imagen);
/* Ver si falló */
if(!$im)
{
/* Crear una imagen en blanco */
$im = imagecreatetruecolor(150, 30);
$fondo = imagecolorallocate($im, 255, 255, 255);
$ct = imagecolorallocate($im, 0, 0, 0);
return $im;
}
header('Content-Type: image/jpeg');
$img = CargarJpeg('falso.image');
imagejpeg($img);
imagedestroy($img);
?>
12
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
El segundo paso consiste en elaborar la imagen que se quiere crear. Para ello
hay que determinar con todo tipo de detalle las características de la misma,
como tamaño, color, formas geométricas, dibujos, etcétera. Veamos ahora las
principales funciones que permiten elaborar imágenes.
13
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
14
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
15
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
usuario. Devuelve un identificador de esa fuente, que siempre debe ser mayor
que 5, para que no pueda entrar en conflicto con las fuentes predefinidas.
El color tanto de las fuentes como de los dibujos o de los fondos es un factor
estético importante de los gráficos. Veamos ahora algunas de las principales
funciones que permiten dar colorido a estos.
Los colores se consiguen mezclando los tres colores básicos en el grado que
necesitemos. La mezcla se obtiene asignando a cada uno de los tres últimos
parámetros un valor desde 0 hasta 255. Por ejemplo, el color negro se obtiene
con la instrucción:
Los valores numéricos que permiten mezclar los colores pueden expresarse en
base decimal, como hemos hecho, o en base hexadecimal. Por ejemplo,
también podemos fijar los colores así:
Para una mayor información sobre los valores que hay que asignar de cada
parámetro de esta función a fin de conseguir el color deseado, puede verse la
página http://eies.njit.edu/~kevin/rgb.txt.html, donde se muestra un completo
mapa de colores con los correspondientes valores.
$color_inicio='0000FF';
16
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Donde los dos primeros dígitos de la izquierda (00x, 0d) corresponden al color
Rojo, los dos siguientes (00x, 0d) al Verde y los dos últimos (FFx, 255d) al
Azul. La función hexdec() devuelve el equivalente decimal del número
hexadecimal pasado como parámetro.
Valor 2: IMG_ARC_CHORD. Une con una línea curva del color indicado el
inicio y el final del ángulo trazado. Los valores 1 y 2 se excluyen.
17
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Valor 3: IMG_ARC_NOFILL. Une con una línea recta del color indicado el
inicio y el final del ángulo trazado
18
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
19
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
20
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Para realizar la funcionalidad que permite al usuario hacer clic sobre la imagen,
hemos utilizar la siguiente etiqueta HTML dentro de un formulario:
Puedes ver que se trata de una etiqueta INPUT de tipo IMAGE y en el estilo CSS
cambiamos el cursor del ratón a una lupa. Así, en la página destino, se generan
21
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Hemos usado estas dos funciones anteriores, entre otras, en el Ejemplo 4 para
calcular el tamaño que ocuparán los textos en una imagen en base al tamaño
de la fuente y la longitud del texto.
22
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
En este programa puedes seleccionar una encuesta y hacer una votación cada
de 10 segundos mediante un sencillo control con una Cookie. Es importante
que estudies en profundidad el código fuente que dibuja la gráfica ya que
puede servirte para realizar la actividad del curso.
23
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
24
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
25
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Utilizando Eclipse PDT puedes abrir el proyecto Ejemplo 9 (Leer datos EXIF
de fotos) de la Unidad 1. Estudia el código fuente y ejecútalo para mostrar en
el navegador el resultado de su interpretación.
Hay otras funciones de la librería GD, casi todas usadas en las diferentes
actividades de esta Unidad, que el alumno puede consultar en el Manual de
PHP y ver cómo se usan.
26
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Los Captchas son utilizados para evitar que programas informáticos puedan
usar automáticamente ciertos servicios. Por ejemplo, para que no puedan
participar en encuestas, registrarse para usar cuentas de correo electrónico (o
su uso para envío de spam (correo basura), etcétera.
Los pasos básicos para generar un sistema de control de tipo Captcha son los
siguientes:
27
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Como hemos mencionado, el primer paso es generar una cadena de texto con
la clave aleatoria. Existen múltiples formas de conseguir esto, si bien se debe
cumplir dos requisitos: el texto tiene que cambiar constantemente y es
necesario cifrarlo.
Por ejemplo, un valor que cambia constantemente puede ser la fecha y la hora
del servidor: para ello, nos serviremos de las funciones microtime() y time()
de PHP. Una vez obtenido un texto aleatorio con la orden rand(), lo cifraremos
con la función hash md5() de PHP. Finalmente, en la última línea del código,
almacenaremos la clave en una variable de sesión:
28
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
/*
Seleccionamos un color para el texto. Como el fondo es rojizo,
escogeremos un rosáceo para el texto. El color del texto debe ser,
idealmente, el mismo que el del fondo, aunque un poco más oscuro para
poder distinguirlo.
*/
$textColor = imagecolorallocate( $captchaImagen, 240, 118, 92 );
Una vez hemos seleccionado los colores, vamos a pintar algunas líneas que
aumenten la dificultad para que un sistema automático lea la clave (texto
aleatorio):
29
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
En la parte final del código anterior puedes ver que indicamos al navegador que
vamos a devolver una imagen con este script e indicamos al navegador que no
cachee nada.
Una vez disponemos de una imagen captcha que incluye una clave aleatoria
asociada a una sesión del usuario, vamos a crear un formulario que permita al
usuario ver la clave, escribirla en un campo de texto y enviarla pulsando un
botón:
</form>';
Hacemos notar que la imagen captcha se podría hacer mucho más compleja,
por ejemplo:
30
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
C: \XAMPP\php\logs\php_error_log
Puedes acceder a este fichero con cualquier editor de texto plano y ver el
contenido del mismo para encontrar los errores de la generación de la imagen.
31
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Adobe Flash
Adobe Flash es el nombre o marca comercial oficial que recibe uno de los
programas más famosos de Adobe. Se trata de una aplicación de creación y
manipulación de gráficos vectoriales con posibilidades de incluir código
mediante el lenguaje ActionScript de tipo script. En realidad, Flash es un
estudio de animación que trabaja con "fotogramas" y se usa para producir
contenido interactivo multimedia en Internet.
32
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
33
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
34
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
35
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Ten en cuenta que la instalación puede ser muy lenta, unos 20-30 minutos.
36
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
37
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Para crear un nuevo proyecto de Action Script 3.0 hacemos clic en el botón
indicado en la siguiente imagen:
38
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
39
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Nota: El código se puede obtener del archivo “main.as” del Ejemplo 11 de esta
Unidad.
Para probar la película podemos hacer clic en la siguiente opción del menú:
(atajo del teclado [CTRL + INTRO]):
40
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
41
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
<?php
// No dejamos que se envíe al navegador del usuario. Es decir, activamos el
buffer de salida de PHP.
ob_start();
$DBHost="localhost";
$DBUser="root";
$DBPass="";
$DB="ejercicios";
42
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Dado que Adobe Flash dispone nativamente integrado el formato XML, para
definir la interfaz entre la película y el script PHP vamos a generar un fichero
XML en memoria del servidor Apache para enviar el resultado de la petición
HTTP.
Este script PHP hace una consulta a la base de datos para saber si el
usuario/contraseña son correctos y construye un archivo XML para devolver el
resultado.
43
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
44
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Para finalizar este apartado vamos a ver lo sencillo que resulta integrar
bibliotecas flash de terceros en un proyecto PHP. En este caso vamos a utilizar
la biblioteca gratuita y de libre uso Open Flash Chart que permite dibujar
gráficos con flash e integrarlos en aplicaciones PHP.
45
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
<?php
// Cargamos la biblioteca Open Flash Chart
include_once 'ofc-library/open_flash_chart_object.php';
// Creamos la imagen con los datos en el fichero datos_grafico.php
open_flash_chart_object( 700, 400, 'http://'. $_SERVER['SERVER_NAME'].
$_SERVER['REQUEST_URI'] .'datos_grafico.php', false);
?>
Como puedes ver, utilizamos la biblioteca Open Flash Chart para crear un
gráfico del tamaño 700x400 e indicamos que los datos se encuentran en el
fichero datos_grafico.php que contiene las siguientes sentencias:
<?php
// Cargamos la biblioteca Open Flash Chart
include_once( 'ofc-library/open-flash-chart.php' );
// Objeto que define el nuevo gráfico
$g = new graph();
46
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
47
Curso Avanzado de PHP
Unidad 1: Tratamiento de gráficos
Resumen
48