source: trunk/npemap.org.uk/scripts/tile-processing/makeSmaller.pl @ 409

Last change on this file since 409 was 409, checked in by Nick Burch, 13 years ago

Create the output directories if they don't already exist

  • Property svn:executable set to *
File size: 2.1 KB
Line 
1#!/usr/bin/perl
2#
3use List::Util qw[min max];
4use Image::Magick;
5
6my $tilesize = 125;
7
8my $scale = shift;
9unless($scale) { $scale = 6; }
10
11my $outdir = "scaled$scale";
12
13if (! -d $outdir) {
14    mkdir $outdir or die "Unable to create dir '$outdir'"
15}
16
17my @files = glob("*/tile-*.jpg");
18my %tiles ;
19
20my $minx, $miny, $maxx, $maxy;
21
22foreach my $f (@files) {
23  $f =~ m/-(\d+)-(\d+)\./;
24  my ($x, $y) = ($1 +0, $2 +0);
25  $tiles{$x} ||= {};
26  $tiles{$x}{$y} = $f;
27}
28
29
30$maxx = max(keys %tiles);
31$maxy = max(map { max(keys %{$tiles{$_}})} keys %tiles);
32
33# start at 0, if there are any tiles in a WxW square, render a scale model
34# of it
35
36foreach my $x (0..($maxx/$scale)) {
37    foreach my $y (0..($maxy/$scale)) {
38        my $filename = sprintf("%s/%03d/%03d.jpg", $outdir, $x, $y);
39        my $outdir = sprintf("%s/%03d/", $outdir, $x);
40               
41
42        if( (! -f $filename) && any_tiles($x, $y, \%tiles) ) {
43            print "Making $filename\n";
44            my $out = Image::Magick->new(size => ($tilesize * $scale). "x".($tilesize *$scale));
45            $out ->ReadImage('xc:white');
46
47            unless(-d $outdir) {
48                mkdir($outdir);
49            }
50
51 foreach my $i (0..($scale -1)) {
52     foreach my $j (0..($scale -1)) {
53         if (defined $tiles{($x*$scale)+$i}{($y*$scale)+$j}) {
54            my $image = Image::Magick->new;
55            my $input = $tiles{($x*$scale)+$i}{($y*$scale)+$j};
56                        #print "  Including $input\n";
57
58            print $image->Read($input);
59            print $out->Composite(image=>$image, x=>($i*$tilesize), y=>((($scale -1)-$j)*$tilesize));
60            undef $image;
61        }
62     }
63 }
64
65            $out->Resize("${tilesize}x$tilesize");
66            $out->Set(quality=>85);
67            $out->Write("jpg:$filename");
68            undef $out;
69            print "($x,$y)\n";
70        }
71   }
72}
73
74use Data::Dumper;
75
76print "($maxx, $maxy)\n";
77
78sub any_tiles {
79 my ($x, $y, $tiles) = (shift, shift, shift);
80 foreach my $i (0..($scale -1)) {
81     foreach my $j (0..($scale -1)) {
82         if (defined $$tiles{($x*$scale)+$i}{($y*$scale)+$j}) {
83             return 1;
84         }
85     }
86 }
87 return 0;
88}
Note: See TracBrowser for help on using the repository browser.