#!/usr/bin/perl -w use strict; use diagnostics; use warnings; use CGI; use Fcntl qw (:DEFAULT :flock); my $cgi = CGI -> new; my %data = ( 'New York' => 10, 'Madrid' => 25, 'Venezuela' => 35, 'Berlin' => 5, ); my %env = ( pfad_fonts => -e '../../fonts' ? '../../fonts' : '.', prefix_temp_file => 'tmp_', pfad_public_html => '..', chmod_dateien_public => $^O =~ /mswin/i ? 0666 : 0444, ); $env{farbe}{font_norm} = '#000000'; my %FORM = ( ses => 'test123', ); print $cgi -> header; print $cgi -> start_html ( -title => 'Test Hochkantschrift', -BGCOLOR => 'white', ); foreach my $FONT ("$env{pfad_fonts}/dejavusans.ttf",undef) { my ($kopf,$zeile) = ('') x 2; foreach my $string (keys %data) { my $ret = hochkantschrift ( $string, $FONT, 10, $env{farbe}{font_norm}, "$env{prefix_temp_file}$FORM{ses}_", $env{pfad_public_html}, $env{chmod_dateien_public}, ); $kopf .= ''; if (substr ($ret,0,1) eq "\x00") { $kopf .= ''; } else { $kopf .= $ret; } $kopf .= ''; $zeile .= "$data{$string}"; } print <  $kopf Temperatur$zeile
HTML_TEIL } print $cgi -> end_html; sub hochkantschrift { # # Aufruf: my $ret = hochkantschrift ([text],[schriftartdatei],[schriftgröße],[schriftfarbe],[zielpfad],[prefixdatei],[chmod]); # [text] = darzustellender Text # [schriftartdatei] = absoluter Pfad und Name zur Schriftartendatei # [schriftgröße] = Größe der Schrift in Pixel # [schriftfarbe] = Schriftfarbe in Hexadezimaler Schreibweise, z.B. #FFFFFF für weiß # [zielpfad] = Pfad für die Grafikdateien # [prefixdatei] = Prefix für Dateiname # [chmod] = Berechtigungen für die neuen Dateien # # Gibt zurück: # entweder "\x00IMAGENAME" = erstes Zeichen ein HEX 00 gefolgt von einem Dateinamen # oder "HTMLCODE" = HTML-Code (Image-Variante ist gescheitert) # my ($STRING,$FONT,$FONTSIZE,$FONTCOLOR,$PREFIXFILE,$DESTPATH,$CHMOD) = @_; my $return = join ('
',split (//,$STRING)); # Default, falls bei der andere Variante etwas schief geht return $return if !defined $FONT; eval "use Digest::MD5 qw (md5_hex); 1;" or return $return; my $dateiname = $PREFIXFILE . md5_hex (@_[0..3]) . '.png'; # Daten im Dateinamen verschlüsseln für Caching der Grafiken if (-f "$DESTPATH/$dateiname") { # aus Cache verfügbar? return "\x00$dateiname"; } return if !-f $FONT; eval "use GD;use GD::Text;use GD::Text::Align;use GD::Graph::colour;use GD::Image;1;" or return $return; # benötigte Module my $gd_text = GD::Text -> new () or return $return; $gd_text -> set_font ($FONT,$FONTSIZE) or return $return; $gd_text -> set_text ($STRING) or return $return; my ($w,$h) = $gd_text -> get ('width','height'); my $im = GD::Image -> new ($h * 1.3,$w) or return $return; my @font_col = GD::Graph::colour::hex2rgb($FONTCOLOR) or return $return; # Farbe konvertieren my @trans_col = @font_col; $trans_col[0] = ($trans_col[0] == 255 ? 0 : 255); # irgendeine andere Farbe für die Transparenz my $trans = $im -> colorAllocate (@trans_col); my $color = $im -> colorAllocate (@font_col); $im -> transparent ($trans); # Transparenz einstellen my $align = GD::Text::Align -> new ($im); $align -> set_font ($FONT,$FONTSIZE); $align -> set_text ($STRING); $align -> draw ($h,$w,3.141592653589 / 2); sysopen (my $file,"$DESTPATH/$dateiname",O_WRONLY|O_EXCL|O_CREAT,$CHMOD) or return $return; binmode ($file) or return $return; print $file $im -> png or return $return; close $file or return $return; return "\x00$dateiname"; }