我想知道是否有一种在php中使用GD绘制倾斜矩形的简单方法
我知道我可以使用imagefilledpolygon
函数,但考虑到你应该手动计算所有的点,这有点棘手。
我认为imagefilledrectangle
的一个改进版本应该是这样的:
imagefilledrectangle($img,$centerX,$centerY,$angle,$color);
其中$centerX
和$centerY
将是矩形中心点的坐标
或者类似的东西。
"倾斜矩形"是什么意思?你是说一个边不垂直于图像x和y方向的矩形?
要使用imagefilledrectangle()
函数,必须提供定义矩形范围的两个点的坐标。我想,如果你想画一个旋转了一个角度的矩形,那么你可能想提供
- 矩形的宽度和高度
- 矩形的中心(或另一个指定点,如矩形的可分辨顶点)
- 矩形旋转的角度
假设我想做一个函数imagefilledrotatedrectangle($img, $centerX, $centerY, $width, $height, $angle, $color)
。我可能会让它计算矩形的4个顶点,然后调用传递这4个点的imagefilledpolygon()
。在伪代码中:
(假设我的顶点标记为1、2、3和4,顺时针旋转。我可以将它们表示为整数对,得到整数$x1
、$y1
、$x2
、$y2
、$x3
、$y3
、$x4
和$y4
。)
function imagefilledrotatedrectangle( $img,
$centerX, $centerY,
$width, $height,
$angle,
$color
) {
// First calculate $x1 and $y1. You may want to apply
// round() to the results of the calculations.
$x1 = (-$width * cos($angle) / 2) + $centerX;
$y1 = (-$height * sin($angle) / 2) + $centerY;
// Then calculate $x2, $y2, $x4 and $y4 using similar formulae. (Not shown)
// To calculate $x3 and $y3, you can use similar formulae again, *or*
// if you are using round() to obtain integer points, you should probably
// calculate the vectors ($x1, $y1) -> ($x2, $y2) and ($x1, $y1) -> ($x3, $y3)
// and add them both to ($x1, $y1) (so that you do not occasionally obtain
// a wonky rectangle as a result of rounding error). (Not shown)
imagefilledpolygon( $img,
array($x1, $y1, $x2, $y2, $x3, $y3, $x4, $y4),
4,
$color
);
}