我正在尝试创建一个带有重复圆圈图案的图像。我在PHP中用GD做这个。到目前为止,我已经能够以水平方式(x轴)平铺圆形但是无法在垂直方向(y轴)平铺圆形。这是一个示例图像。
以下是创建上述图片的代码:
$width = 1000;
$height = 500;
$image_p = imagecreatetruecolor($width, $height);
$color = imagecolorallocate($image_p, 0, 255, 0);
for ($i = 0; $i <= 10; $i++){
if ($i % 2 !== 0){ //only if odd numbers
imagefilledellipse ($image_p, 50 * $i, 50, 100, 100, $color);
}
}
imagejpeg($image_p, uniqid() .'.jpg');
我的猜测是,为了以垂直方式平铺每个圆圈,它只需要另一个嵌套for loop
,它将类似于已存在的那个,除了y轴的变化,如下所示:
imagefilledellipse ($image_p, 50, 50 * $i, 100, 100, $color);
我尝试了很多嵌套变体但无法使其工作。请帮忙。
答案 0 :(得分:1)
函数imagefilledellipse
具有以下签名(我想):
imagefilledellipse(image, x, y, width, height, color)
这意味着您正在为i
中0 < i < 10
的每个x
一个具有不同y
位置的圆圈绘图。
将其与$width = 1000;
$height = 500;
$image_p = imagecreatetruecolor($width, $height);
$color = imagecolorallocate($image_p, 0, 255, 0);
for ($i = 0; $i <= 10; $i++){
if ($i % 2 !== 0){ //only if odd numbers
imagefilledellipse ($image_p, 50, 50 * $i, 100, 100, $color);
}
}
imagejpeg($image_p, uniqid() .'.jpg');
参数交换以绘制垂直圆圈:
$width = 1000;
$height = 500;
$image_p = imagecreatetruecolor($width, $height);
$color = imagecolorallocate($image_p, 0, 255, 0);
for ($i = 0; $i <= 10; $i++){
for ($j = 0; $j <= 10; $j++) {
if ($i % 2 !== 0 && $j % 2 !== 0) { //only if odd numbers
imagefilledellipse ($image_p, 50 * $i, 50 * $j, 100, 100, $color);
}
}
}
imagejpeg($image_p, uniqid() .'.jpg');
为了绘制水平和垂直圆圈,正如你所说,你确实需要一个嵌套的for循环:
i * 50
此外,如果您要将比例从50 + i * 100
更改为imagefilledellipse ($image_p, 50 + 100 * $i, 50 + 100 * $j, 100, 100, $color);
,则无需检查奇数,如下所示:
Label1.Text = Date.Today.ToString("dddd")
答案 1 :(得分:1)
如果你知道你想要多少列,那应该很容易。
$colCounter=0;
$yAxis = 50;
for ($i = 0; $i <= 10; $i++){
if ($i % 2 !== 0){ //only if odd numbers
if ($colCounter % 5 === 0){ // Do something every 5 cols
$yAxis = $yAxis + 50 // add 50 onto each row
}
$colCounter++;//increment counter
imagefilledellipse ($image_p, 50 * $i, $yAxis, 100, 100, $color);
}
}
请注意,这是未经测试的代码