Está en la página 1de 2

Inserción de imágenes y elementos gráficos

Lineas y rectangulos
Modificación de la clase FPDF
El fichero fpdf.php que contiene la clase FPDF tiene una carencia relativa a la gestión de
La clase FPDF incluye métodos imágenes en formato GIF. En la propia principal http://www.fpdf.org/ se hace una mención
para el dibujo de segmentos a esa carencia y la forma de subsanarla.
rectilineos y de rectángulos.

Las funciones que utiliza para Fichero inicial fpdf.php


estos menesteres son las
siguientes: Guardado
como
fpdf_con_gif.php
$obj->Line(X1,Y1,X2,Y2) Modificaciones en el fichero inicial

Si no se ha especificado ningún Línea Cambios


color -usando SetDrawColor- o
Donde dice:
un espesor de línea - por medio de
SetLineWidth - se usarán los if($type=='jpg' || $type=='jpeg')
valores por defecto (color negro y $info=$this->_parsejpg($file);
0,2 mm. de espesor). elseif($type=='png')
$info=$this->_parsepng($file);
Cuando se trata de dibujar
rectángulos, hemos de utilizar la else
función: {
//Allow for additional formats
$obj->Rect(X1,Y1,A,H,'estilo')
añadir las líneas en rojo:
911
donde X1 e Y1 son las if($type=='jpg' || $type=='jpeg')
coordenadas de la esquina
$info=$this->_parsejpg($file);
superior izquierda del mismo, A el
elseif($type=='png')
ancho, H el alto y estilo que puede
ser una de estas tres cadenas: D, $info=$this->_parsepng($file);
F, DF que significan: dibujar elseif($type=='gif')
líneas de borde, rellenar, y $info=$this->_parsegif($file);
dibujar líneas y rellenar. Si no else
se especifica estilo se interpretará {
por defecto la opción D. //Allow for additional formats
Donde dice:
Las imágenes GIF
//End of class
}
La clase FPDF, en su versión
original, no permite utilizar anteponer:
imágenes en formato GIF. No
function _parsegif($file){
obstante es posible adaptar la
clase y añadirle esa posibilidad.
//Function by Jérôme Fenal
Para ello es preciso realizar las require_once 'gif.php';
modificaciones que se indican a la //GIF class in pure PHP from Yamasoft
derecha y que pueden resumires //(formerly at http://www.yamasoft.com)
en tres acciones. $h=0; $w=0;
$gif=new CGIF();
La primera de ellas es efectuar una if (!$gif->loadFile($file, 0))
modificación de la función Image $this->Error("GIF parser: unable to open file $file");
() contenida en la clase FPDF del
if($gif->m_img->m_gih->m_bLocalClr) {
fichero fpdf.php. Se trata de
$nColors = $gif->m_img->m_gih->m_nTableSize;
incluir la condición para imágenes
gif. $pal = $gif->m_img->m_gih->m_colorTable->toString();
if($bgColor != -1) {
El uso de imágenes GIF requiere $bgColor= $gif->m_img->m_gih->m_colorTable->colorIndex($bgColor);
utilizar una nueva función }
llamada _parsegif -la tienes en la $colspace='Indexed';
tabla de la derecha- que habrá que } elseif($gif->m_gfh->m_bGlobalClr) {
incluir como un método más $nColors = $gif->m_gfh->m_nTableSize;
dentro de la clase FPDF.
$pal = $gif->m_gfh->m_colorTable->toString();
La función _parsegif requiere el if($bgColor != -1) {
uso de un nuevo fichero -gif.php- $bgColor = $gif->m_gfh->m_colorTable->colorIndex($bgColor);
desarrollado por Yamasoft y que 1638 }
nosotros hemos encontrado en el $colspace='Indexed';
fichero zip que puede descargarse } else {
desde este enlace. Lo hemos $nColors = 0;
extraido de él y lo hemos incluido $bgColor = -1;
en estos materiales. $colspace='DeviceGray';
$pal='';
Hemos editado el fichero fpdf.php
}
y lo hemos guardado con un nuevo
nombre: fpdf_con_gif.php (se $trns='';
trata de conservar el fichero if($gif->m_img->m_bTrans && ($nColors > 0)) {
original y hacer los cambios sobre $trns=array($gif->m_img->m_nTrans);
uno nuevo) y hemos realizado los }
cambios que se indican al margen $data=$gif->m_img->m_data;
sobre este último fichero. $w=$gif->m_gfh->m_nWidth;
$h=$gif->m_gfh->m_nHeight;
Una vez realizadas las if($colspace=='Indexed' and empty($pal))
modificaciones la opción GIF ha
$this->Error('Missing palette in '.$file);
quedado totalmente funcional.
if ($this->compress) {
$data=gzcompress($data);
¡Cuidado! return array( 'w'=>$w, 'h'=>$h, 'cs'=>$colspace, 'bpc'=>8,
'f'=>'FlateDecode', 'pal'=>$pal, 'trns'=>$trns, 'data'=>$data);
Los cambios comentados en
} else {
la tabla anterior ya han sido return array( 'w'=>$w, 'h'=>$h, 'cs'=>$colspace,
realizados. 'bpc'=>8, 'pal'=>$pal, 'trns'=>$trns, 'data'=>$data);
}
Lao ficheros gif.php y
}
fpdf_con_gif.php se han
incluido junto con estos
materiales. Incluir (en el mismo directorio que fpdf_con_gif.php) el fichero:

gif.php

Inserción de imágenes

Se pueden incluir imágenes


Un ejemplo con gráficos e imágenes
mediante la función:
<?
$obj->Image('nombre',X1,Y1,A,
#incluimos el fichero resultante de las modificaciones anteriores
H,'tipo','enl')
include("fpdf_con_gif.php");
donde X1 e Y1 son las define('FPDF_FONTPATH','c:/Apache/htdocs/cursoPHP/fontsPDF/');
coordenadas dónde se situará la /* establecemos las dimensiones del documento en mm.
esquina superior izquierda de la creamos un nuevo objeto y A-4 apaisado.
imagen, A es el ancho con el que Hemos modificado algunas funciones de la clase pero no le hemos
se visualizará la imagen, H su cambiado
altura, tipo es el formato de la el nombre, por ello el constructor es el mismo */
imagen original que puede ser: $MiPDF=new FPDF('L','mm','A4');
JPG, JPEG, PNG ó GIF. Por último, # ajustamos la visualización para ver la página completa en pantalla
el parámetro enl permite -tal
$MiPDF->SetDisplayMode('fullpage');
como ocurría con CELL ó con
WRITE y con los mismos criterios #añadimos una página
allí utilizados- establecer un enlace $MiPDF->AddPage();
externo o una referencia interna. # sin haber definido previamente ni un color ni un ancho de linea
# aparecerá en negro y con un espesor de 0.2 mm
El parámetro nombre debe $MiPDF->Line(5,5,287,5);
especificar la ruta, el nombre y la #ensayamos las diferentes opciones de rectangulos
extensión de la imagen a incluir. #con los colores y espesores por defecto
La clase no soporta ni entrelazados $MiPDF->Rect(10,10,50,50);
en las imágenes gif ni
$MiPDF->Rect(70,10,50,50,'D');
transparencias (canales alfa) en
las imágenes png.
$MiPDF->Rect(140,10,50,50,'F');
$MiPDF->Rect(200,10,50,50,'DF');
Las dimensiones de la imagen # modificamos los colores y espesores de linea
pueden omitirse (incluyendo en su $MiPDF->SetDrawColor(255,0,0);
lugar una cadena vacia). En ese $MiPDF->SetFillColor(0,0,255);
caso incluiría la imagen original $MiPDF->SetLineWidth(3);
con una resolución de 72 puntos # dibujamos nuevos rectángulos con los nuevos valores
por pulgada. $MiPDF->Rect(10,65,50,50);
Si se especifica una sola de las $MiPDF->Rect(70,65,50,50,'D');
dimensiones la otra se calcula de $MiPDF->Rect(140,65,50,50,'F');
forma automática y se mantienen $MiPDF->Rect(200,65,50,50,'FD');
las proporciones. Si se insertan # insertamos una imagen (png) sin especificar dimensiones
valores de largo y ancho pueden $MiPDF->Image('./images/cruz.png',10,118,'','','png');
generarse, a voluntad, efectos de # otra imagen(jpg) en la que unicamente especificamos el alto
distorsión. $MiPDF->Image('./images/cabina.jpg',90,118,'',90,'jpg');
# otra imagen(gif) en la que especificamos ancho y alto y provocamos
Inserción de # una distorsión
imágenes dinámicas $MiPDF->Image('./images/peligro.gif',215,118,80,50,'gif');
#añadimos una nueva página
$MiPDF->AddPage();
Es posible combinar la potencia
# asignamos un nombre a la imagen dinámica que vamos a generar
gráfica de las funciones de PHP
para la creación de imágenes
# e incluir en el documento PDF
dinámicas con la opción de crear $imagen="ladinamica.jpg";
ficheros PDF mediente la clase # ejecutamos la función que crea la nueva imagen
FPDF. La forma de proceder es imagen1($imagen);
simple y puedes verla en el # insertamos la nueva imagen y generamos la salida
ejemplo que tienes aquí a la $MiPDF->Image($imagen, 45, 35 , 150, '','jpg','http://www.google.es');
derecha. $MiPDF->Output();
# ya podemos borrar la imagen dinámica que hemos creado
Basta incluir una función -dentro
unlink($imagen);
del mismo fichero o por inclusión
de un fichero externo que la
# esta es la función que crea la imagen dinamica
contenga- que cree la imagen # le asignamos un nombre para que sea guarda temporalmente
dinámica y la guarde con un # en el directorio actual
nombre previamente establecido. function imagen1($imagen){
Header("Content-type: image/jpeg");
Incluimos el nombre de esa $im = imagecreate(200,200);
imagen en la función Image y, una $fondo=imagecolorallocate ($im, 0, 0, 200);
vez producida la salida mediante $blanco=imagecolorallocate ($im, 255, 255, 255);
Output, proceder a borrarla del
Imagefill ($im, 0, 0, $fondo);
directorio en el que fue creada.
Imagerectangle ($im, 10, 10, 190, 190, $blanco);
Imagejpeg($im,$imagen);
ImageDestroy($im);
}
?>

Ejemplo140.php

Anterior Indice Siguiente

También podría gustarte