# Füge Text vor rechteckigem Hintergrund in ein Bild ein # img_addtext($img, $text, $opt_ref); # $img Bildobjekt, Ziel für den Text # $text Textstring # $opt_ref Ref auf Hash mit Optionen für Annotate # Für x- und y-Position, Textgröße und Hintergrundfarbe # werden Defaultwerte gesetzt # sub img_addtext { my ($img, $text, $opt_ref) = @_; my $err; # set option defaults exists $opt_ref->{x} or $opt_ref->{x} = 0; exists $opt_ref->{y} or $opt_ref->{y} = 0; exists $opt_ref->{pointsize} or $opt_ref->{pointsize} = 30; exists $$opt_ref{undercolor} or $$opt_ref{undercolor} = 'white'; chomp $text; unless ($text =~ /\n/) { # single line text $err = $img->Annotate(text => $text, %$opt_ref); die "$err" if "$err"; return; }; # multiline text my $textimg = mulitext($text, $opt_ref); my ($w, $h) = $textimg->Get('width', 'height'); $err = $img->Composite(image => $textimg, compose => 'Over', x => $opt_ref->{x}, y => $opt_ref->{y}, ); die "$err" if "$err"; return; } # Erzeuge Bild mit mehrzeiligem Text vor rechteckigem Hintergrund # my $txtimg = mulitext($text, $opt_ref); # $text Textstring # $opt_ref Ref auf Hash mit Optionen für Annotate # $txtimg Erzeugtes Bildobjekt # sub mulitext { my ($text, $opt_ref) = @_; my $err; my @numlines = $text =~ /\n/g; my $numlines = @numlines + 1; # Objekt für Textbild erzeugen my $textimg = Image::Magick->new(); # Bildgröße setzen # Werte sind willkürlich, begrenzen aber die Größe der Textgrafik $textimg->Set(size=>'1200x900'); # Bild mit Backgroundfarbe erzeugen $err = $textimg->ReadImage("xc:$opt_ref->{undercolor}"); die "$err" if "$err"; # Text erzeugen $err = $textimg->Annotate(text => $text, %$opt_ref); die "$err" if "$err"; # Bild verkleinern $err = $textimg->Trim(); die "$err" if "$err"; # Freiraum um den Text hinzu my $bordersize = $opt_ref->{pointsize}/3; $err = $textimg->Border(fill => "$opt_ref->{undercolor}", width => $bordersize, height => $bordersize, ); die "$err" if "$err"; return $textimg; }