Guest User

Untitled

a guest
Jul 16th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.46 KB | None | 0 0
  1. use strict;
  2.  
  3. use Graphics::Primitive::Canvas;
  4. use Geometry::Primitive::Circle;
  5. use Geometry::Primitive::Polygon;
  6. use Graphics::Primitive::Paint::Gradient::Linear;
  7. use Graphics::Primitive::Paint::Gradient::Radial;
  8. use Graphics::Primitive::Paint::Solid;
  9. use Graphics::Primitive::Operation::Fill;
  10. use Graphics::Primitive::Operation::Stroke;
  11. use Graphics::Color::RGB;
  12. use Graphics::Primitive::Driver::Cairo;
  13.  
  14. my $white = Graphics::Color::RGB->new(red => 1, green => 1, blue => 1, alpha => 1);
  15. my $black = Graphics::Color::RGB->new(red => 0, green => 0, blue => 0, alpha => 1);
  16. my $gray = Graphics::Color::RGB->new(red => 0, green => 0, blue => 0, alpha => .25);
  17. my $darkgray = Graphics::Color::RGB->new(red => 0, green => 0, blue => 0, alpha => .5);
  18.  
  19. my $red = Graphics::Color::RGB->new(red => 1, green => 0, blue => 0, alpha => 1);
  20. my $darkred = Graphics::Color::RGB->new(red => .5, green => 0, blue => 0, alpha => 1);
  21. my $orange = Graphics::Color::RGB->new(red => 1, green => .54, blue => 0, alpha => 1);
  22. my $yellow = Graphics::Color::RGB->new(red => 1, green => 1, blue => 0, alpha => 1);
  23. my $blue = Graphics::Color::RGB->new(red => 0, green => 0, blue => 1, alpha => 1);
  24. my $otherblue = Graphics::Color::RGB->new( red => .44, green => .63, blue => .76, alpha => 1);
  25. my $green = Graphics::Color::RGB->new(red => 0, green => 1, blue => 0, alpha => 1);
  26. my $indigo = Graphics::Color::RGB->new(red => .29, green => 0, blue => .50, alpha => .5);
  27. my $violet = Graphics::Color::RGB->new(red => .93, green => .50, blue => .93, alpha => .5);
  28.  
  29. my $driver = Graphics::Primitive::Driver::Cairo->new(format => 'PNG');
  30.  
  31. my $body = Graphics::Primitive::Canvas->new(
  32. background_color => Graphics::Color::RGB->new(red => 1, green => 1, blue => 1),
  33. width => 1024,
  34. height => 768
  35. );
  36.  
  37. $body->move_to(0, 0);
  38. $body->rectangle(1024, 768);
  39.  
  40. my $backgrad = Graphics::Primitive::Paint::Gradient::Linear->new(
  41. line => Geometry::Primitive::Line->new(
  42. start => Geometry::Primitive::Point->new(x => 512, y => 0),
  43. end => Geometry::Primitive::Point->new(x => 512, y => 768),
  44. ),
  45. );
  46. $backgrad->add_stop(0.0, $white);
  47. $backgrad->add_stop(1, $gray);
  48. my $backop = Graphics::Primitive::Operation::Fill->new(
  49. paint => $backgrad
  50. );
  51. $body->do($backop);
  52.  
  53. $body->path->move_to(100, 300);
  54. $body->path->ellipse(150, 90, 1);
  55.  
  56. my $afillop = Graphics::Primitive::Operation::Fill->new(
  57. paint => Graphics::Primitive::Paint::Solid->new,
  58. preserve => 1
  59. );
  60. $afillop->paint->color($otherblue);
  61.  
  62. my $astrokeop = Graphics::Primitive::Operation::Stroke->new;
  63. $astrokeop->brush->width(2);
  64. $astrokeop->brush->color($black);
  65.  
  66. $body->do($afillop);
  67. $body->do($astrokeop);
  68.  
  69. $body->path->move_to(500, 500);
  70. $body->path->arc(300, 0, 6.28, 1);
  71.  
  72. my $grad = Graphics::Primitive::Paint::Gradient::Radial->new(
  73. start => Geometry::Primitive::Circle->new(
  74. origin => [419, 344],
  75. radius => 50
  76. ),
  77. end => Geometry::Primitive::Circle->new(
  78. origin => [540, 444],
  79. radius => 300
  80. ),
  81. );
  82. $grad->add_stop(0.0, $orange);
  83. $grad->add_stop(.5, $red);
  84. $grad->add_stop(1, $darkred);
  85. my $gradop = Graphics::Primitive::Operation::Fill->new(paint => $grad);
  86. $body->do($gradop);
  87.  
  88. $body->path->move_to(725,50);
  89. $body->path->rectangle(150, 150);
  90.  
  91. my $fillop = Graphics::Primitive::Operation::Fill->new(
  92. paint => Graphics::Primitive::Paint::Solid->new,
  93. preserve => 1
  94. );
  95. $fillop->paint->color($orange);
  96.  
  97. my $strokeop = Graphics::Primitive::Operation::Stroke->new;
  98. $strokeop->brush->width(15);
  99. $strokeop->brush->color($black);
  100. $strokeop->brush->line_cap('round');
  101.  
  102. $body->do($fillop);
  103. $body->do($strokeop);
  104.  
  105. $body->path->move_to(350, 50);
  106. $body->arc(50, 0, 3.14, 1);
  107. $body->close_path;
  108. my $fillop2 = $fillop->clone;
  109. $fillop2->paint->color($green);
  110. my $strokeop2 = $strokeop->clone;
  111. $strokeop2->brush->width(5);
  112. $strokeop2->brush->line_join('round');
  113. $body->do($fillop2);
  114. $body->do($strokeop2);
  115.  
  116. $body->path->move_to(475, 100);
  117. $body->path->line_to(525, 175);
  118. $body->path->line_to(575, 50);
  119. my $strokeop3 = $strokeop->clone;
  120. $strokeop3->brush->color($blue);
  121. $strokeop3->brush->line_join('bevel');
  122. $body->do($strokeop3);
  123.  
  124. $body->path->move_to(80, 80);
  125. $body->path->curve_to(
  126. [300, 400],
  127. [400, 100],
  128. [300, 200]
  129. );
  130. $body->do($strokeop);
  131.  
  132. my $poly = Geometry::Primitive::Polygon->new;
  133. $poly->add_point(Geometry::Primitive::Point->new(x => 850, y => 300));
  134. $poly->add_point(Geometry::Primitive::Point->new(x => 900, y => 300));
  135. $poly->add_point(Geometry::Primitive::Point->new(x => 900, y => 350));
  136. $poly->add_point(Geometry::Primitive::Point->new(x => 930, y => 350));
  137. $poly->add_point(Geometry::Primitive::Point->new(x => 930, y => 370));
  138. $poly->add_point(Geometry::Primitive::Point->new(x => 900, y => 370));
  139. $poly->add_point(Geometry::Primitive::Point->new(x => 850, y => 350));
  140. $body->path->add_primitive($poly);
  141. my $strokeop4 = $strokeop3->clone;
  142. $strokeop4->brush->color($indigo);
  143. $strokeop4->brush->width(8);
  144. $body->do($strokeop4);
  145.  
  146. my $poly = Geometry::Primitive::Polygon->new;
  147. $poly->add_point(Geometry::Primitive::Point->new(x => 805, y => 370));
  148. $poly->add_point(Geometry::Primitive::Point->new(x => 900, y => 300));
  149. $poly->add_point(Geometry::Primitive::Point->new(x => 930, y => 350));
  150. $body->path->add_primitive($poly);
  151. my $strokeop5 = $strokeop4->clone;
  152. $strokeop4->brush->color($violet);
  153. $body->do($strokeop5);
  154.  
  155. $driver->prepare($body);
  156. $driver->finalize($body);
  157. $driver->draw($body);
  158. $driver->write('foo.png');
Add Comment
Please, Sign In to add comment