Panotools-Script
view release on metacpan or search on metacpan
#!/usr/bin/perl
use strict;
use warnings;
use Image::Magick;
my $image = new Image::Magick;
$image->Read (shift);
my $path_prefix = shift || 't';
my $pix_tile = shift || 256;
my ($pix_width, $pix_height) = $image->Get ('width', 'height');
my $pix_size = 1;
$pix_size *= 2 while ($pix_size < $pix_width || $pix_size < $pix_height);
unless ($pix_size == $pix_width && $pix_size == $pix_height)
{
my $x_offset = $pix_size - $pix_width +1;
my $y_offset = $pix_size - $pix_height +1;
$image->Border (geometry => $x_offset .'x'. $y_offset);
$image->Crop (geometry => $pix_size .'x'. $pix_size .'+'. $x_offset .'+'. $y_offset);
$image->Set (page => '0x0+0+0');
}
entile ($image, $path_prefix, $pix_tile);
sub entile
{
my $image = shift;
my $path_prefix = shift;
my $pix_tile = shift;
my $pix_width = $image->Get ('width');
my $w2 = $pix_width/2;
my $q = $image->Clone;
my $r = $image->Clone;
my $s = $image->Clone;
my $t = $image->Clone;
$q->Crop (geometry => $w2.'x'."$w2+0+0");
$q->Set ( page => '0x0+0+0');
$r->Crop (geometry => $w2.'x'."$w2+$w2+0");
$r->Set ( page => '0x0+0+0');
$s->Crop (geometry => $w2.'x'."$w2+$w2+$w2");
$s->Set ( page => '0x0+0+0');
$t->Crop (geometry => $w2.'x'."$w2+0+$w2");
$t->Set ( page => '0x0+0+0');
if ($w2 == $pix_tile)
{
$q->Write ($path_prefix .'q.jpg');
$r->Write ($path_prefix .'r.jpg');
$s->Write ($path_prefix .'s.jpg');
$t->Write ($path_prefix .'t.jpg');
}
elsif ($w2 < $pix_tile)
{
exit;
}
else
{
entile ($q, $path_prefix .'q', $pix_tile);
entile ($r, $path_prefix .'r', $pix_tile);
( run in 0.732 second using v1.01-cache-2.11-cpan-39bf76dae61 )