PHP GD绘制虚线或虚线,且线宽> 1

时间:2018-10-26 19:01:22

标签: php line gd

尝试绘制宽度为1的虚线或虚线可以得到我想要的结果,没问题。

但是当我尝试使用宽度大于1的宽度时,会导致线条以意外的图案绘制(示例1)。

然后,当我尝试变得聪明并绘制宽度为1的n条线时,我仍然得到了意外的图案(示例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上该页面上的示例,说明如何不使用此功能。

0 个答案:

没有答案