#!/usr/bin/perl
use warnings;
use strict;

use File::Temp qw( tempfile );

my $img = `wget \Q$ENV{QUERY_STRING}\E -q -O -`;
($img, my $type) = zoom($img, 1.5);
$type =~ s/\W//g;
print "Content-Type: image/$type\r\n\r\n";
print $img;

sub zoom {
    my ($img, $factor) = @_;
    my ($fh_orig, $filename_orig) = tempfile();
    print {$fh_orig} $img;
    close $fh_orig or die "close: $!";
    my (undef, $type, $geometry) = split q{ }, `identify \Q$filename_orig\E 2>/dev/null`;
    if (defined $type) {
        my $ext = lc $type;
        my $x = $factor * (split /x/, $geometry)[0];
        my ($fh_zoom, $filename_zoom) = tempfile(SUFFIX => ".$ext");
        system('convert','-interpolate','Bicubic','-adaptive-resize',$x,
            $filename_orig,$filename_zoom) == 0 or warn "system($?): $!\n";
        open $fh_zoom, '<', $filename_zoom or die "open: $!";
        undef $/;
        $img = <$fh_zoom>;
        close $fh_zoom or die "close: $!";
        unlink $filename_zoom or die "unlink: $!";
    }
    unlink $filename_orig or die "unlink: $!";
    return ($img, lc($type));
}

