Thread Vertikale Spaltenbeschriftung für table (HTML)
(72 answers)
Opened by bianca at 2010-08-01 20:39
Soooo, da hab ich mal was gebastelt und es funktioniert auch perfekt.
Habe nur noch eine Winzigkeit: Mir ist so als sei die Schriftfarbe im Image nicht so ganz richtig schwarz. Ist das eine optische Täuschung oder gehe ich im Script mit den Farben falsch um? Wer mit testen möchte: Bitte über Webbrowser aufrufen. Danke Code (perl): (dl
)
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"; } Edit: Code aktualisiert Edit2: Die Schriftartdatei: http://www.file-upload.net/download-2719015/dejavu... modedit Editiert von pq: Teilbaum Last edited: 2012-02-29 21:10:47 +0100 (CET) 10 print "Hallo"
20 goto 10 |