Leser: 24
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
#!/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 .= '<td style="vertical-align: bottom; text-align: center; color: ' . $env{farbe}{font_norm} . ';">'; if (substr ($ret,0,1) eq "\x00") { $kopf .= '<img src="/' . substr ($ret,1) . '">'; } else { $kopf .= $ret; } $kopf .= '</td>'; $zeile .= "<td style=\"text-align: right; color: $env{farbe}{font_norm};\">$data{$string}</td>"; } print <<HTML_TEIL; <table> <tr><td> </td>$kopf</tr> <tr><td style="color: $env{farbe}{font_norm};">Temperatur</td>$zeile</tr> </table> <hr> 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 ('<br>',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"; }
2010-08-03T11:58:41 GwenDragonDu setzt in Zeile 97 als Hintergrund eine Farbe ein!
my @trans_col = @font_col;
my @trans_col = GD::Graph::colour::hex2rgb($BACKGROUNDCOLOR) or return $return; # Farbe konvertieren
$im->filledRectangle(0,0,$h,$w,$trans);
$im -> transparent ($trans);
1 2
my $backg_color = GD::Graph::colour::hex2rgb($BACKGROUNDCOLOR); $im->filledRectangle(0,0,$h*1.3,$w,$backg_color);
2010-08-03T11:58:41 GwenDragon//EDIT: Außer das Antialiasing abzustellen, in dem du in Zeile 99 die Variable $color noch mit -1 multiplizierst oder sonstwie negierst.
my $color = $im -> colorAllocate (@font_col);
my $color = -1 * $im->colorAllocate (@font_col);
$align -> draw ($h,$w,3.141592653589 / 2);
$align -> set(color => -$color);
QuoteThis should be the index of the colour in the GD::Image object's palette