ImagickDraw — краткое руководство по рисованию

Продолжаю свою серию постов о библиотеке Imagick. Сегодня речь об одном из классов, входящих в состав библиотеки.
ImagickDraw это простой класс, входящий в состав библиотеки Imagick для php, которым Вы можете пользоваться. Все заданные операции над объектом выполняются последовательно, согласно порядку вызовов методов класса. С помощью методов ImagickDraw можно рисовать разнообразные примитивы, из которых составляются все объекты в трехмерном мире.

Рассмотрим следующий код:

  1. <?php
  2.  /* Создаем канву с белым фоном */
  3. $im = new Imagick();
  4. $im->newImage( 400, 400, new ImagickPixel( "white" ) );
  5.  
  6. /* Теперь порисуем! */
  7. $draw = new ImagickDraw();
  8.  
  9. /* Зленый эллипс с красной обводкой */
  10. $draw->setStrokeColor( new ImagickPixel( "red" ) );
  11. $draw->setStrokeWidth( 2 );
  12. $draw->setFillColor( new ImagickPixel( "green" ) );
  13. $draw->ellipse( 200, 100, 50, 50, 0, 360 );
  14.  
  15. /* Строим изображение */
  16. $im->drawImage( $draw );
  17.  
  18. /* Png */
  19. $im->setImageFormat( "png" );
  20.  
  21. header( "Content-Type: image/png" );
  22. echo $im;

В результате получим изображение зеленого круга с красной окантовкой:
Imagick Круг

 

Думаю, тут все просто и понятно. Теперь попробуем нарисовать что-нибудь более интересное. В следующем примере расширим ImagickDraw, добавив к нему дочерний класс для формирования новой фигуры (примтива :) )- цветка.

  1. <?php
  2. /* Создаем класс-потомок */
  3. class Flower extends ImagickDraw
  4. {
  5.     private $ImagickPixel;
  6.  
  7.     public function __construct()
  8.     {
  9.         $this->ImagickPixel = new ImagickPixel();
  10.     }
  11.  
  12.     public function drawFlower()
  13.     {
  14.         $this->createStraw();
  15.         $this->createPetals();
  16.         $this->createLeafs();
  17.     }
  18.  
  19. /* Рисуем лепестки */
  20.     private function createPetals()
  21.     {
  22.         $this->ImagickPixel->setColor( 'red' );
  23.         $this->setFillColor( $this->ImagickPixel );
  24.  
  25.         $this->ImagickPixel->setColor( 'black' );
  26.         $this->setStrokeColor( $this->ImagickPixel );
  27.         $this->setStrokeWidth( 0.5 );
  28.  
  29.         $this->circle( 40, 90, 70, 110 );
  30.         $this->circle( 85, 50, 115, 70 );
  31.         $this->circle( 125, 90, 155, 110 );
  32.         $this->circle( 85, 130, 115, 150 );
  33.  
  34.         $this->ImagickPixel->setColor( 'white' );
  35.         $this->setFillColor( $this->ImagickPixel );
  36.  
  37.         $this->circle( 85, 90, 115, 110 );
  38.     }
  39.  
  40. /* Рисуем стебель */
  41.     private function createStraw()
  42.     {
  43.         $this->ImagickPixel->setColor( 'transparent' );
  44.         $this->setFillColor( $this->ImagickPixel );
  45.  
  46.         $this->ImagickPixel->setColor( 'green' );
  47.         $this->setStrokeColor( $this->ImagickPixel );
  48.         $this->setStrokeWidth( 4 );
  49.  
  50.         $this->bezier( array(
  51.                              array( 'x' => 85, 'y' => 150 ),
  52.                              array( 'x' => 105, 'y' => 190 ),
  53.                              array( 'x' => 55, 'y' => 400 ),
  54.                              array( 'x' => 75, 'y' => 500 ),
  55.                              )
  56.                       );
  57.     }
  58.  
  59. /* Рисуем листья */
  60.     private function createLeafs()
  61.     {
  62.         $this->ImagickPixel->setColor( 'green' );
  63.         $this->setFillColor( $this->ImagickPixel );
  64.         $this->setStrokeColor( $this->ImagickPixel );
  65.  
  66.         $this->bezier( array(
  67.                              array( 'x' => 75, 'y' => 370 ),
  68.                              array( 'x' => 65, 'y' => 250 ),
  69.                              array( 'x' => 25, 'y' => 270 ),
  70.                              array( 'x' => 15, 'y' => 290 ),
  71.                              array( 'x' => 25, 'y' => 310 ),
  72.                              array( 'x' => 35, 'y' => 330 ),
  73.                              array( 'x' => 55, 'y' => 350 ),
  74.                              )
  75.                       );
  76.  
  77.         $this->bezier( array(
  78.                              array( 'x' => 75, 'y' => 365 ),
  79.                              array( 'x' => 95, 'y' => 250 ),
  80.                              array( 'x' => 135, 'y' => 270 ),
  81.                              array( 'x' => 145, 'y' => 280 ),
  82.                              array( 'x' => 145, 'y' => 290 ),
  83.                              array( 'x' => 135, 'y' => 310 ),
  84.                              array( 'x' => 125, 'y' => 320 ),
  85.                             )
  86.                      );
  87.     }
  88. }
  89.  /* Теперь воспользуемся нашим классом */
  90. $Flower = new Flower();
  91. $Flower->drawFlower();
  92.  
  93. $Imagick = new Imagick();
  94. $Imagick->newPseudoImage( 175, 500, "gradient:pink-white" );
  95. $Imagick->setImageFormat( 'png' );
  96.  
  97. $Imagick->drawImage( $Flower );
  98.  
  99. header( "Content-Type: image/{$Imagick->getImageFormat()}" );
  100. echo $Imagick;

В итоге, выполнив скрипт, получим простенький цветок, примерно такой:

Цветок с помощью Imagick

Цветок с помощью Imagick


Вот так просто можно нарисовать простые вещи. Ну а поскольку сложные вещи создаются из множества простых, с помощью класса ImagickDraw можно нарисовать все, что угодно.

Оригинал

Запись опубликована в рубрике PHP & MySQL с метками , , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">