尝试绘制宽度为1的虚线或虚线可以得到我想要的结果,没问题。
但是当我尝试使用宽度大于1的宽度时,会导致线条以意外的图案绘制(示例1)。
然后,当我尝试变得聪明并绘制宽度为1的n条线时,我仍然得到了意外的图案(示例2)。
那么如何创建宽度> 1的虚线(-----)或点划线(.....)?
示例1:
示例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');
这将呈现一条几乎完美的水平虚线,但请注意该行右下角的像素丢失:
但是尝试画一条斜线,然后又出现了可怕的错误……
我知道有一个名为 imagedashedline 的函数。但是,它被标记为已过时。实际上,我正在遵循php.net上该页面上的示例,说明如何不使用此功能。