Leser: 24
2010-08-01T19:29:58 pktmist es für eine Webseite?
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
#!/usr/bin/perl
$|++;
use strict;
use warnings;
use diagnostics;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use GD;
my $font = gdGiantFont;
my $letter_height = 15;
my $letter_width = 10;
my $query = new CGI;
my $cmd = $query->param('cmd') || 'show';
my $text = $query->param('text') || '';
print $query->header('-type' => 'image/jpeg');
binmode STDOUT;
my @letters = split(//,$text);
my $img_height = ($cmd eq 'show')? $letter_height * scalar(@letters) : $letter_height + 2;
my $img_width = ($cmd eq 'show')? $letter_width + 2 : $letter_width * scalar(@letters);
my $img = new GD::Image($img_width,$img_height);
my $bg_color = $img->colorAllocate(45,167,213);
my $text_color = $img->colorAllocate(255,255,255);
$img->fill($img_width,$img_height,$bg_color);
if($cmd eq 'show'){
my $y_pos = 0;
foreach my $letter(@letters){
$img->string($font,1,$y_pos,$letter,$text_color);
$y_pos += $letter_height;
}
print $img->jpeg;
}else{
my $x_pos = 0;
foreach my $letter(@letters){
$img->string($font,$x_pos,1,$letter,$text_color);
$x_pos += $letter_width;
}
my $rotated_img = $img->copyRotate90();
print $rotated_img->jpeg;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
use GD; my $string = "Das ist ein Text!"; my $font = GD::Font->Small; my $height = $font->height; my $width = $font->width; my $im = GD::Image->new($height,5 + $width * length $string); my $white = $im->colorAllocate(255,255,255); my $color = $im->colorAllocate(0,0,0); # ist Schwarz $im->transparent($white); $im->stringUp($font,0,$width * length $string,$string,$color);
print $im->png;
2010-08-02T07:44:16 GwenDragonDas alles in eine Funktion umzuwandeln ist ja für bianca einfach. ;)
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
#!/usr/bin/perl -w use 5.008; use strict; use diagnostics; use warnings; use CGI; use CGI::Carp qw (fatalsToBrowser warningsToBrowser); use GD; my $string = "Das ist ein Text!"; my $font = GD::Font->Small; my $height = $font->height; my $width = $font->width; my $im = GD::Image->new($height,5 + $width * length $string); my $white = $im->colorAllocate(255,255,255); my $color = $im->colorAllocate(0,0,0); # ist Schwarz $im->transparent($white); $im->stringUp($font,0,$width * length $string,$string,$color); open my $file,'>','hochkantschrift.png'; binmode ($file); print $file $im->png;
QuoteFor more fonts, compile libgd with TrueType support and use the stringFT() call.
Quote@bounds = $image->stringFT($fgcolor,$fontname,$ptsize,$angle,$x,$y,$string,\%options)
This method uses TrueType to draw a scaled, antialiased string using the TrueType vector font of your choice. It requires that libgd to have been compiled with TrueType support, and for the appropriate TrueType font to be installed on your system.
2010-08-02T11:51:24 GwenDragon@bounds = $image->stringFT($fgcolor,$fontname,$ptsize,$angle,$x,$y,$string,\%options)
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
sub hochkantschrift { my ($STRING,$FONT) = @_; my $FONTSIZE = 12; my $return = join ('<br>',split (//,$STRING)); # Default, falls bei der andere Variante etwas schief geht my $modul = 1; eval "use GD; use GD::Text; use GD::Text::Align; 1;" or return $return; 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 $white = $im->colorAllocate(255,255,255); my $color = $im->colorAllocate(0,0,0); # ist Schwarz $im->transparent($white); my $align = GD::Text::Align->new($im) or return $return; $align->set_font($FONT, $FONTSIZE); $align->set_text($STRING); $align->draw($h,$w,3.14/2); open my $file,'>','hochkantschrift.png'; binmode ($file); print $file $im -> png; close $file; return $return; }
2010-08-02T14:19:33 GwenDragonAus irgendeinem Grund greht aber die $image->stringFT nicht fürs Drehen. Leider. Ich habe es mit pi/4 als Drehwinkel probierert, geht irgendwie nicht.
Versuche doch mal GD::Text::Align.
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"; }
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
#!/usr/bin/perl -w use strict; use diagnostics; use warnings; use CGI; my $cgi = CGI -> new; my %data = ( 'New York' => 10, 'Madrid' => 25, 'Venezuela' => 35, 'Berlin' => 5, ); my ($kopf,$zeile) = ('') x 2; foreach my $string (keys %data) { my $ret = hochkantschrift ($string,'dejavusans.ttf'); $kopf .= "<td>$ret</td>"; $zeile .= "<td>$data{$string}</td>"; } print $cgi -> header; print $cgi -> start_html ('Test Hochkantschrift'); print <<HTML_TEIL; <table> <tr><td> </td>$kopf</tr> <tr><td>Temperatur</td>$zeile</tr> </table> HTML_TEIL print $cgi -> end_html; sub hochkantschrift { my $return = join ('<br>',split (//,$_[0])); # Default, falls bei der andere Variante etwas schief geht do {{ my $modul = 1; eval "use GD; 1;" or $modul = 0; last if !$modul || !-f $_[1]; # my $font = GD::Font->Small; my $font; my $error = 0; eval { # eval da das Modul sonst eine Fehlermeldung wirft falls etwas mit der Datei nicht stimmt $font = GD::Font -> load ($_[1]) or $error = 1; }; last if $error || !defined $font; my $height = $font->height; my $width = $font->width; my $im = GD::Image->new($height,5 + $width * length $_[0]); my $white = $im->colorAllocate(255,255,255); my $color = $im->colorAllocate(0,0,0); # ist Schwarz $im->transparent($white); $im->stringUp($font,0,$width * length $_[0],$_[0],$color); open my $file,'>','hochkantschrift.png'; binmode ($file); print $file $im -> png; $return = 1; last; }} while (0); return $return; }