GD.t
上传用户:qdrechuli
上传日期:2022-08-01
资源大小:917k
文件大小:6k
源码类别:

视频捕捉/采集

开发平台:

Visual C++

  1. #!perl
  2. use FileHandle;
  3. use GD;
  4. chdir 't' || die "Couldn't change to 't' directory: $!";
  5. $arg = shift;
  6. if (1 || defined($arg) && ($arg eq '--write')) {
  7.     $WRITEREGRESS++;
  8. }
  9. print "1..12n";
  10. for $filehandletype ("bare", "handle"){
  11.     &compare(&test1,1,$filehandletype);
  12.     &compare(&test2,2,$filehandletype);
  13.     &compare(&test3,3,$filehandletype);
  14.     &compare(&test4,4,$filehandletype);
  15.     &compare(&test5,5,$filehandletype);
  16.     &compare(&test6,6,$filehandletype);
  17. }
  18. sub compare {
  19.     my($imageData,$testNo,$fht) = @_;
  20.     local($/);
  21.     undef $/;
  22.     my $ok = $testNo;
  23.     my $regressdata;
  24.     if ($fht eq "bare"){
  25.         open (REGRESSFILE,"./test.out.$testNo.gif") 
  26.     || die "Can't open regression file './t/test.out.$testNo.gif': $!n";
  27.         $regressdata = <REGRESSFILE>;
  28.         close REGRESSFILE;
  29. print $imageData eq $regressdata ? "ok $ok" : "not ok $ok","n";
  30.     } else {
  31. my $fh = FileHandle->new;
  32.         $fh->open("./test.out.$testNo.gif") or
  33.     die "Can't open regression file './t/test.out.$testNo.gif': $!n";
  34.         my $regressgif = GD::Image->newFromGif($fh);
  35.         $fh->close;
  36. $ok = $testNo+6;
  37. print $imageData eq $regressgif->gif ? "ok $ok" : "not ok $ok","n";
  38.     }
  39.     if ($WRITEREGRESS) {
  40. open (REGRESSFILE,">./test.out.$testNo.gif") 
  41.     || die "Can't open regression file './t/test.out.$testNo.gif': $!n";
  42. print REGRESSFILE $imageData;
  43. close REGRESSFILE;
  44.     }
  45. }
  46. sub test1 {
  47.     my($im) = new GD::Image(300,300);
  48.     my($white) = $im->colorAllocate(255, 255, 255);        
  49.     my($black) = $im->colorAllocate(0, 0, 0);
  50.     my($red) = $im->colorAllocate(255, 0, 0);      
  51.     my($green) = $im->colorAllocate(0,255,0);
  52.     my($yellow) = $im->colorAllocate(255,250,205);
  53.     open (TILE,"./tile.gif") || die "Can't open tile file: $!";
  54.     my($tile) = newFromGif GD::Image(TILE);
  55.     close TILE;
  56.     $im->setBrush($tile);
  57.     $im->arc(100,100,100,150,0,360,gdBrushed);
  58.     $im->setTile($tile);
  59.     $im->filledRectangle(150,150,250,250,gdTiled);
  60.     $im->rectangle(150,150,250,250,$black);
  61.     $im->setStyle($green,$green,$green,gdTransparent,$red,$red,$red,gdTransparent);
  62.     $im->line(0,280,300,280,gdStyled);
  63.     return $im->gif;
  64. }
  65. sub test2 {
  66.     my($im) = new GD::Image(300,300);
  67.     my($white,$black,$red,$blue,$yellow) = (
  68.     $im->colorAllocate(255, 255, 255),
  69.     $im->colorAllocate(0, 0, 0),
  70.     $im->colorAllocate(255, 0, 0),
  71.     $im->colorAllocate(0,0,255),
  72.     $im->colorAllocate(255,250,205)
  73.     );
  74.     my($brush) = new GD::Image(10,10);
  75.     $brush->colorAllocate(255,255,255); # white
  76.     $brush->colorAllocate(0,0,0); # black
  77.     $brush->transparent($white); # white is transparent
  78.     $brush->filledRectangle(0,0,5,2,$black); # a black rectangle
  79.     $im->setBrush($brush);
  80.     $im->arc(100,100,100,150,0,360,gdBrushed);
  81.     my($poly) = new GD::Polygon;
  82.     $poly->addPt(30,30);
  83.     $poly->addPt(100,10);
  84.     $poly->addPt(190,290);
  85.     $poly->addPt(30,290);
  86.     $im->polygon($poly,gdBrushed);
  87.     $im->fill(132,62,$blue);
  88.     $im->fill(100,70,$red);
  89.     $im->fill(40,40,$yellow);
  90.     $im->interlaced(1);
  91.     $im->copy($im,150,150,20,20,50,50);
  92.     $im->copyResized($im,10,200,20,20,100,100,50,50);
  93.     return $im->gif;
  94. }
  95. sub test3 {
  96.     my($im) = new GD::Image(100,50);
  97.     my($black,$white,$red,$blue) = 
  98. (
  99.  $im->colorAllocate(0, 0, 0),
  100.  $im->colorAllocate(255, 255, 255),
  101.  $im->colorAllocate(255, 0, 0),
  102.  $im->colorAllocate(0,0,255)
  103.  );
  104.     $im->arc(50, 25, 98, 48, 0, 360, $white);
  105.     $im->fill(50, 21, $red);
  106.     return $im->gif;
  107. }
  108. sub test4 {
  109.     my($im) = new GD::Image(225,180);
  110.     my($black,$white,$red,$blue,$yellow) = 
  111.        ($im->colorAllocate(0, 0, 0),
  112. $im->colorAllocate(255, 255, 255),
  113. $im->colorAllocate(255, 0, 0),
  114. $im->colorAllocate(0,0,255),
  115. $im->colorAllocate(255,250,205)
  116. );
  117.     my($poly) = new GD::Polygon;
  118.     $poly->addPt(0,50);
  119.     $poly->addPt(25,25);
  120.     $poly->addPt(50,50);
  121.     $im->filledPolygon($poly,$blue);
  122.     $poly->offset(100,100);
  123.     $im->filledPolygon($poly,$red);
  124.     $poly->map(50,50,100,100,10,10,110,60);
  125.     $im->filledPolygon($poly,$yellow);
  126.     $poly->map($poly->bounds,50,20,80,160);
  127.     $im->filledPolygon($poly,$white);
  128.     return $im->gif;
  129. }
  130. sub test5 {
  131.     my($im) = new GD::Image(300,300);
  132.     my($white,$black,$red,$blue,$yellow) = 
  133. (
  134.  $im->colorAllocate(255, 255, 255),
  135.  $im->colorAllocate(0, 0, 0),
  136.  $im->colorAllocate(255, 0, 0),
  137.  $im->colorAllocate(0,0,255),
  138.  $im->colorAllocate(255,250,205)
  139.  );
  140.     $im->transparent($white);
  141.     $im->interlaced(1);
  142.     my($brush) = new GD::Image(10,10);
  143.     $brush->colorAllocate(255,255,255);
  144.     $brush->colorAllocate(0,0,0);
  145.     $brush->transparent($white);
  146.     $brush->filledRectangle(0,0,5,2,$black);
  147.     $im->string(gdLargeFont,150,10,"Hello world!",$red);
  148.     $im->string(gdSmallFont,150,28,"Goodbye cruel world!",$blue);
  149.     $im->stringUp(gdTinyFont,280,250,"I'm climbing the wall!",$black);
  150.     $im->charUp(gdMediumBoldFont,280,280,"Q",$black);
  151.     $im->setBrush($brush);
  152.     $im->arc(100,100,100,150,0,360,gdBrushed);
  153.     $poly = new GD::Polygon;
  154.     $poly->addPt(30,30);
  155.     $poly->addPt(100,10);
  156.     $poly->addPt(190,290);
  157.     $poly->addPt(30,290);
  158.     $im->polygon($poly,gdBrushed);
  159.     $im->fill(132,62,$blue);
  160.     $im->fill(100,70,$red);
  161.     $im->fill(40,40,$yellow);
  162.     return $im->gif;
  163. }
  164. sub test6 {
  165.     my $dtor = 0.0174533;
  166.     my $pi = 3.141592654;
  167.     my $xsize = 500;   my $ysize = 500;   my $scale = 1;
  168.     my $x_offset = $xsize/2;   my $y_offset = $ysize/2;
  169.     my $im = new GD::Image($xsize,$ysize);
  170.     my $poly = new GD::Polygon;
  171.     my $col_bg = $im->colorAllocate(0,0,0);
  172.     my $col_fg = $im->colorAllocate(255,255,0);
  173.     my $col_fill = $im->colorAllocate(255,0,0);
  174.     my $r_0 = 100;     my $theta_0 = 20;      my $spring_factor = 30;
  175.     for($theta=0;$theta<=360;$theta++) {
  176. my $r = $r_0 + $spring_factor*sin(2*$pi*$theta/$theta_0);
  177. my $x = int($r * cos($theta*$dtor))*$scale+$x_offset;
  178. my $y = int($r * sin($theta*$dtor))*$scale+$y_offset;
  179. $poly->addPt($x,$y);
  180.     }
  181.     $im->filledPolygon($poly,$col_fill);            # Call gdImageFilledPolygon()
  182.     return $im->gif;
  183. }