PHP GD Нарисуйте пунктирную или пунктирную линию с шириной линии> 1 - PullRequest
0 голосов
/ 26 октября 2018

Попытка нарисовать пунктирную или пунктирную линию шириной 1 дает желаемый результат, без проблем.

Но когда я пытаюсь сделать это с шириной больше 1, это приводит к тому, что линии рисуются неожиданным образом(пример 1).

Затем, когда я пытаюсь быть умным и рисую n линий шириной 1, я все равно получаю неожиданный образец (пример 2).

Так как мне создать пунктир(- - - - -) или пунктирная (...) линия шириной> 1?

Пример 1:

Example 1

Пример 2:

example 2


Наконец, я попробовал что-то еще, и кажется, что я могу рендерить горизонтальные пунктирные линии, вычитая количество строк изгоризонтальная координата, но даже это не является идеальным, поскольку она не отображает последнюю линию должным образом.

Несмотря на это, действительно нет лучшего способа визуализации толстой пунктирной линии без необходимости рисовать отдельные линии, равные 1к отметке?

<?php

$size=[500,500];

$width=5;

$left=10; $right=200;
$top=60; $bottom=60;

$resImage=imagecreatetruecolor($size[0],$size[1]);

$intColour=imagecolorallocate($resImage,0xff,0xff,0);

imagesetthickness($resImage,1);

imagesetstyle(

    $resImage,

    [
        $intColour,$intColour,$intColour,$intColour,

        IMG_COLOR_TRANSPARENT,IMG_COLOR_TRANSPARENT,

        IMG_COLOR_TRANSPARENT,IMG_COLOR_TRANSPARENT
    ]

);

for($intLineCount=0; $intLineCount<$width; $intLineCount++) {

    imageline(

        $resImage,

        $left-$intLineCount,

        $top+$intLineCount,

        $right-$intLineCount,

        $bottom+$intLineCount,

        IMG_COLOR_STYLED
    );
}

imagepng($resImage,'/tmp/myimage.png');

Это делает почти идеальную горизонтальную пунктирную линию, но обратите вниманиенедостающие пиксели в нижнем правом углу линии:

example 3

Но попробуйте нарисовать наклонную линию, и снова все пойдет ужасно неправильно ...

Мне известно о том, что есть функция с именем imagedashedline .Однако он помечен как устаревший.Фактически, я следую примеру на этой странице php.net , как это сделать без этой функции.

...