A while back I engaged in an experiment combining two of my interests - Perl and quilting. I was pleased with the outcome, and decided to continue working on my script to extend its capabilities. This version uses Image::Magick to create an image of the generated random layout.
#!/usr/bin/perl -w
use strict;
use Image::Magick;
###
# Revenge of the Perl Quilt
# - an extension of the original perl quilt generator that
# uses ImageMagick to create a montage image of the generated layout
# Ellen Knowlton Wilson, 3/3/01
###
my @swatch;
my @quilt;
my $number_of_blocks;
my $number_of_columns;
my $number_of_rows;
my %numbers_to_fabrics; # This is a hash containing the
# number and the location of the fabric images. For example,
# my %numbers_to_fabrics = (1 => 'red.jpg', 2 =>
# 'yellow.jpg', 3 => 'blue.jpg')
my $count = scalar keys %numbers_to_fabrics;
# Prompt for the number of columns and rows desired.
do {
print "How many columns would you like? \n";
chomp($number_of_columns = <STDIN>);
print "How many rows would you like? \n";
chomp($number_of_rows = <STDIN>);
$number_of_blocks = $number_of_columns * $number_of_rows
}
# Check that the number of blocks is less than or equal
# to the number of available fabrics. At this time, to
# reuse a fabric requires that it be entered multiple times
# in the hash. I'll probably revise this later.
until ($number_of_blocks <= $count);
@swatch=(1 .. $number_of_blocks);
my $images = Image::Magick->new();
while (@swatch) {
my $x = rand(@swatch);
my $v = $swatch[$x];
# This print statement is useful for finding
# typos in your file names.
print "opening file $numbers_to_fabrics{$v}\n";
$images->Read($numbers_to_fabrics{$v}) && die "read failed";
push(@quilt, $v) && splice(@swatch, $x, 1);
}
# This prints the grid of numbers.
print join(" ", splice(@quilt, 0, $number_of_columns)) ."\n" for
(1..$number_of_rows);
# This creates the montage of images.
my $layout=$images->Montage(geometry=>'50x50+0+0',tile=>$number_of_col
+umns);
$layout->Write("quilt.jpg") && die "write failed";
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
Outside of code tags, you may need to use entities for some characters:
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.
|
|