Make cards from YAML
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CardGen/CardGen.pl

35 lines
1.3 KiB

use YAML::XS qw(LoadFile);
use Image::Magick;
use Text::Wrap;
$Text::Wrap::columns = 30;
my $cards = LoadFile('shopping.yml');
$bgcolour = $cards->{Deck}->{Background};
$mainfont = $cards->{Deck}->{Font};
$txtcolour = $cards->{Deck}->{TextColour};
foreach my $card (keys %{$cards->{Deck}->{Cards}}){
my $image = Image::Magick->new(size=>'600x825');
$image->ReadImage('canvas:' . $bgcolour);
$image->Draw(stroke=>'red', fill => 'none', strokewidth=>1, primitive=>'rectangle', points=>'38,38 562,787');
my $surface = Image::Magick->new;
$surface->Rotate(90);
$surface->Resize('600x825!');
$image->Composite(compose => 'over', image => $surface, x => 0, y => 0);
my $text;
$image->Set(font => $mainfont, pointsize => 25);
foreach my $line (@{$cards->{Deck}->{Cards}->{$card}}){
$text = $text . wrap('', '', $line) . "\n";
}
$image->Annotate(text => $card, x => 50, y => 100, font => $mainfont, fill => $txtcolour, pointsize => 60);
my $newlines = () = $text =~ /(\n)/g;
$image->Annotate(text => $text, x => 50, y => (750-(25*$newlines)), font => $mainfont, fill => $txtcolour, pointsize => 25);
$image->Write($card . '.png');
}
#my $body = Image::Magick->new;
#$body->ReadImage('mayhemtraining9.png');
#say $image->Composite(compose => 'over', image => $image, x => 100, y => 165);