27 febrero 2004
Trabajo con la libreria GD desde perl
Este perl script genera un archivo png conteniendo un gráfico generado a partir de uno ya existente y de un trazo generado por una aplicación en una PDA. En concreto, este programa sirvió de plantilla para generar imágenes de documentos firmados a través de una PDA.
Para generar el documento se partía de una imagen del documento en blanco, que se rellenaba con los datos necesarios y se colocaba la firma en su casilla correspondiente.
Este no es el programa final, si no que es el programa que hice para probar las capacidades de la librería GD y el el algoritmo de dibujo de los trazos de la PDA.
Para generar el documento se partía de una imagen del documento en blanco, que se rellenaba con los datos necesarios y se colocaba la firma en su casilla correspondiente.
Este no es el programa final, si no que es el programa que hice para probar las capacidades de la librería GD y el el algoritmo de dibujo de los trazos de la PDA.
#!/usr/bin/perl
use GD;
$DEBUG = 0;
@FIRMAS = (
'95018C0383067809611056144C18431C3B2033263129322C34303932483652365E367A3589349832A730A730',
'BA19BD17C016C215C014BD15BA17B519B01CAB20A5239E2697288B2E87328334813588318E2E952B9E289E28',
'5C3962376B34762F83299124A01EAE18BC13C70ED00ADA07D10AC80DBD12B017A21C93228426762B6B2F6B2F',
'5E0A560E4E10441440163F183E1B401C451D4A1D511D5B1C651A6F187B15871492129E109E10',
'D26872390209A1CA21AA919AE18B118B419B41CB31FB023AC28A72DA3329E369B3A973D963F963F',
'C970F97129517931C8F228B28872D833280377F3B7F3E8041834388438F4396429F3FA83DB139BA35C231C231'
);
$CADENA = $FIRMAS[int($ARGV[0])];
# $firma = new GD::Image(256,128);
$firma = GD::Image->newFromPng('plantilla.png');
$blanco = $firma->colorAllocate(255,255,255);
$negro = $firma->colorAllocate(0,0,0);
$gris = $firma->colorAllocate(230,230,230);
# $firma->transparent($blanco);
# $firma->interlaced('true');
# gdGiantFont gdLargeFont gdMediumBoldFont gdSmallFont gdTinyFont
$PI = 3.14150927;
$ANGULO = $PI / 7;
@bounds = $firma->stringFT($gris,'vera.ttf',15,$ANGULO,10,118,'David Rodriguez Fernandez');
$DesplazamientoFirmaX = 160;
$DesplazamientoFirmaY = 210;
# Las siguientes variables guardan las coordenadas del final del trazo anterior
$Xa = hex(substr($CADENA,0,2));
$Ya = hex(substr($CADENA,2,2));
if ($Ya > 128){
$Ya -= 128;
}
$CADENA = substr($CADENA,4);
while ($CADENA ne ''){
$Xb = hex(substr($CADENA,0,2));
$Yb = hex(substr($CADENA,2,2));
$CADENA = substr($CADENA,4);
if ($Yb > 128){ # Comienzo de nuevo trazo esta vez no pinto.
$Yb -= 128;
print "Nuevo Trazo\n" if $DEBUG;
}else{ # pinto una linea
print "$Xa\t$Ya\t$Xb\t$Yb\n" if $DEBUG;
$firma->line( $Xa+$DesplazamientoFirmaX,$Ya+$DesplazamientoFirmaY,
$Xb+$DesplazamientoFirmaX,$Yb+$DesplazamientoFirmaY,
$negro);
}
$Xa = $Xb;
$Ya = $Yb;
}
open F, '>firma.'.$ARGV[0].'.png';
binmode F;
print F $firma->png;
close(F);
__END__
GeoURL