Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

file 137 lines (116 sloc) 4.818 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
#!perl -w
use strict;
use Test::More tests => 23;

BEGIN { use_ok("Imager") }

#$Imager::DEBUG=1;

Imager::init('log'=>'testout/t66paste.log');

# the original smoke tests
my $img=Imager->new() || die "unable to create image object\n";

ok($img->open(file=>'testimg/scale.ppm',type=>'pnm'), "load test img");

my $nimg=Imager->new() or die "Unable to create image object\n";
ok($nimg->open(file=>'testimg/scale.ppm',type=>'pnm'), "load test img again");

ok($img->paste(img=>$nimg, top=>30, left=>30), "paste it")
  or print "# ", $img->errstr, "\n";;

ok($img->write(type=>'pnm',file=>'testout/t66.ppm'), "save it")
  or print "# ", $img->errstr, "\n";

# more stringent tests
{
  my $src = Imager->new(xsize => 100, ysize => 110);
  $src->box(filled=>1, color=>'FF0000');

  $src->box(filled=>1, color=>'0000FF', xmin => 20, ymin=>20,
            xmax=>79, ymax=>79);

  my $targ = Imager->new(xsize => 100, ysize => 110);
  $targ->box(filled=>1, color =>'00FFFF');
  $targ->box(filled=>1, color=>'00FF00', xmin=>20, ymin=>20, xmax=>79,
             ymax=>79);
  my $work = $targ->copy;
  ok($work->paste(src=>$src, left => 15, top => 10), "paste whole image");
  # build comparison image
  my $cmp = $targ->copy;
  $cmp->box(filled=>1, xmin=>15, ymin => 10, color=>'FF0000');
  $cmp->box(filled=>1, xmin=>35, ymin => 30, xmax=>94, ymax=>89,
            color=>'0000FF');

  is(Imager::i_img_diff($work->{IMG}, $cmp->{IMG}), 0,
     "compare pasted and expected");

  $work = $targ->copy;
  ok($work->paste(src=>$src, left=>2, top=>7, src_minx => 10, src_miny => 15),
     "paste from inside src");
  $cmp = $targ->copy;
  $cmp->box(filled=>1, xmin=>2, ymin=>7, xmax=>91, ymax=>101, color=>'FF0000');
  $cmp->box(filled=>1, xmin=>12, ymin=>12, xmax=>71, ymax=>71,
            color=>'0000FF');
  is(Imager::i_img_diff($work->{IMG}, $cmp->{IMG}), 0,
     "compare pasted and expected");

  # paste part source
  $work = $targ->copy;
  ok($work->paste(src=>$src, left=>15, top=>20,
                  src_minx=>10, src_miny=>15, src_maxx=>80, src_maxy =>70),
     "paste src cropped all sides");
  $cmp = $targ->copy;
  $cmp->box(filled=>1, xmin=>15, ymin=>20, xmax=>84, ymax=>74,
            color=>'FF0000');
  $cmp->box(filled=>1, xmin=>25, ymin=>25, xmax=>84, ymax=>74,
            color=>'0000FF');
  is(Imager::i_img_diff($work->{IMG}, $cmp->{IMG}), 0,
     "compare pasted and expected");

  # go by width instead
  $work = $targ->copy;
  ok($work->paste(src=>$src, left=>15, top=>20,
                  src_minx=>10, src_miny => 15, width => 70, height => 55),
     "same but specify width/height instead");
  is(Imager::i_img_diff($work->{IMG}, $cmp->{IMG}), 0,
     "compare pasted and expected");

  # use src_coords
  $work = $targ->copy;
  ok($work->paste(src=>$src, left => 15, top => 20,
                  src_coords => [ 10, 15, 80, 70 ]),
     "using src_coords");
  is(Imager::i_img_diff($work->{IMG}, $cmp->{IMG}), 0,
     "compare pasted and expected");

  {
    # Issue #18712
    # supplying just src_maxx would set the internal maxy to undef
    # supplying just src_maxy would be ignored
    # src_maxy (or it's derived value) was being bounds checked against
    # the image width instead of the image height
    $work = $targ->copy;
    my @warns;
    local $SIG{__WARN__} = sub { push @warns, "@_"; print "# @_"; };
    
    ok($work->paste(src=>$src, left => 15, top => 20,
src_maxx => 50),
       "paste with just src_maxx");
    ok(!@warns, "shouldn't warn");
    my $cmp = $targ->copy;
    $cmp->box(filled=>1, color => 'FF0000', xmin => 15, ymin => 20,
xmax => 64, ymax => 109);
    $cmp->box(filled=>1, color => '0000FF', xmin => 35, ymin => 40,
xmax => 64, ymax => 99);
    is(Imager::i_img_diff($work->{IMG}, $cmp->{IMG}), 0,
       "check correctly pasted");

    $work = $targ->copy;
    @warns = ();
    ok($work->paste(src=>$src, left=>15, top=>20,
src_maxy => 60),
       "paste with just src_maxy");
    ok(!@warns, "shouldn't warn");
    $cmp = $targ->copy;
    $cmp->box(filled => 1, color => 'FF0000', xmin => 15, ymin => 20,
xmax => 99, ymax => 79);
    $cmp->box(filled => 1, color => '0000FF', xmin => 35, ymin => 40,
xmax => 94, ymax => 79);
    is(Imager::i_img_diff($work->{IMG}, $cmp->{IMG}), 0,
       "check pasted correctly");

    $work = $targ->copy;
    @warns = ();
    ok($work->paste(src=>$src, left=>15, top=>20,
src_miny => 20, src_maxy => 105),
       "paste with src_maxy > source width");

    $cmp = $targ->copy;
    $cmp->box(filled => 1, color => 'FF0000', xmin => 15, ymin => 20,
ymax => 104);
    $cmp->box(filled => 1, color => '0000FF', xmin => 35, ymin => 20,
xmax => 94, ymax => 79);
    is(Imager::i_img_diff($work->{IMG}, $cmp->{IMG}), 0,
       "check pasted correctly");
  }
}
Something went wrong with that request. Please try again.