2015-10-19 3 views
1

not justifiedвертикально оправдывает созданный шаблон


Я использовал PHP-Imagick для создания узорного-изображения повторяющихся кругов, как данный пример-изображение выше. Ниже приведен код, который создал изображение выше. Я явно прокомментировал код, и имена переменных хранятся довольно подробными, чтобы знать, что происходит.

$canvas = new Imagick(); 
$cw = 700; // user provided width 
$ch = 300; //user provided height 
$hrzntl_c = 10; //user provided - number of horizontal circles - min 2 and max 200 

$c_diamtr = $cw/$hrzntl_c; //set the diameter of circle 
$c_radius = $c_diamtr /2; //set the radius of circle 

$vrtcl_c = $ch/$c_diamtr; //calculated number of vertical circles. 

$canvas->newImage($cw, $ch, new ImagickPixel("seagreen")); //create a canvas 

    $draw = new ImagickDraw(); // create a draw object     
    $draw->setFillColor(new ImagickPixel("white")); // set the fill color 

    for ($i = 0; $i <= $hrzntl_c; $i++){ //loop horizontal 
     for ($j = 0; $j <= $vrtcl_c; $j++){ //loop vertical 
     $draw->ellipse($c_radius + $c_diamtr * $i, $c_radius + $c_diamtr * $j, $c_radius, $c_radius, 0, 360); 
     } 
    } 

    $canvas->drawImage($draw); // render the circles to the canvas 
    $canvas->setImageFormat("png"); // set the image format to png 
    header("Content-Type: image/png"); // Output the image 
    echo $canvas; 

ВОПРОС: Теперь у вас есть представление о том, что круги предназначены для горизонтально оправданной. Мне нужна помощь, чтобы оправдать вертикальные круги. Посмотрите на нижнюю часть примера изображения, и вы увидите, что круги действительно не оправданы. Под «оправданием», я имею в виду, если вы видите половину/полный круг к вершине, тогда вы должны увидеть половину/полный круг внизу. Как этот прекрасный пример.

justified image

ответ

1

Вычислить смещение на основе высоты изображения и подсчета окружности. Кстати, вы должны адаптировать свой расчет счета:

$vrtcl_c = ceil($ch/$c_diamtr); 
$verticalOffset = ($ch - $vrtcl_c * c_diamtr)/2; 

Затем переложить свои рисунки:

for ($j = 0; $j < $vrtcl_c; $j++){ //loop vertical 
    $draw->ellipse($c_radius + $c_diamtr * $i, 
        $c_radius + $c_diamtr * $j + $verticalOffset, 
        $c_radius, $c_radius, 0, 360); 
} 
+0

Brilliant. И да, у меня были планы округлить или закрыть счет. Благодарю. – gurung

Смежные вопросы