use GD; my $big = GD::Image->newFromPng($png_file) or die "Can't load PNG $png_file: $!"; my($new_w, $new_h) = map { int($_/3) } $big->getBounds; my $small = GD::Image->new($new_w, $new_h); $small->copyResized($big, 0, 0, 0, 0, $new_w, $new_h, $big->getBounds); print $small->png;