具有圆角的imagefilledrectangle功能

时间:2012-03-15 12:13:16

标签: php

我愿意使用以下代码

创建包含特定文本的图像
<?PHP
header('Content-Type: image/png');

$im = imagecreatetruecolor(320, 80);

$blue = imagecolorallocate($im, 59, 89, 152);
$sky = imagecolorallocate($im, 219, 241, 255);

imagefilledrectangle($im, 0, 0, 399, 79, $sky);

$font = 'arial.ttf';

$text = "Hello world"; 

imagettftext($im, 15, 0, 10, 20, $blue, $font, $text); 
imagepng($im);
imagedestroy($im);
?>

现在输出将如下图所示

这是矩形

rectangle image

立即 如果我想把它变成圆角怎么办? 通过参考php手册关于function imagefilledrectangle我发现了一个很好的评论功能,据说可以使它圆角

<?

function ImageRectangleWithRoundedCorners(&$im, $x1, $y1, $x2, $y2, $radius, $color)
{
// draw rectangle without corners
imagefilledrectangle($im, $x1+$radius, $y1, $x2-$radius, $y2, $color);
imagefilledrectangle($im, $x1, $y1+$radius, $x2, $y2-$radius, $color);
// draw circled corners
imagefilledellipse($im, $x1+$radius, $y1+$radius, $radius*2, $radius*2, $color);
imagefilledellipse($im, $x2-$radius, $y1+$radius, $radius*2, $radius*2, $color);
imagefilledellipse($im, $x1+$radius, $y2-$radius, $radius*2, $radius*2, $color);
imagefilledellipse($im, $x2-$radius, $y2-$radius, $radius*2, $radius*2, $color);
}

?>
但是没有提到怎么用! 〜任何帮助

3 个答案:

答案 0 :(得分:1)

如果有人需要半径后面的背景是透明的,可以使用这个功能(我修改了OP发布的那个)=>

function image_rectangle_w_rounded_corners(&$im, $x1, $y1, $x2, $y2, $radius, $color) {
    $alpha = imagecolorallocatealpha($im, 0, 0, 0, 127);
    
    // draw rectangle without corners
    imagefilledrectangle($im, $x1+$radius, $y1, $x2-$radius, $y2, $color);
    imagefilledrectangle($im, $x1, $y1+$radius, $x2, $y2-$radius, $color);
    
    // draw circled corners
    imagefilledellipse($im, $x1+$radius, $y1+$radius, $radius*2, $radius*2, $color);
    imagefilledellipse($im, $x2-$radius, $y1+$radius, $radius*2, $radius*2, $color);
    imagefilledellipse($im, $x1+$radius, $y2-$radius, $radius*2, $radius*2, $color);
    imagefilledellipse($im, $x2-$radius, $y2-$radius, $radius*2, $radius*2, $color);
    
    // alpha radius bg
    $width = imagesx($im);
    $height = imagesy($im) - 0.01;
    
    imagefill($im, 0, 0, $alpha);
    imagefill($im, $width, 0, $alpha);
    imagefill($im, 0, $height, $alpha);
    imagefill($im, $width, $height, $alpha);
}

当然 - 透明度可以切换为任何其他颜色。

答案 1 :(得分:0)

让我试试

可能

$x1 = top left point's x coordinate
$y1 = top left point's y coordinate
$x2 = bottom right point's x coordinate
$y2 = bottom right point's y coordinate
$radius = radius of the curve of rounded corner

设置这些数据并试试......祝你好运:)

答案 2 :(得分:0)

这是一个古老的问题,但也许有人会从这个答案中受益。 这是一个非常不错的功能! 使用方法如下:

x1 = the horizontal x point where you want rectangle to start
x2 = the horizontal x point where you want rectangle to end
y1= the vertical y point where rectangle starts
y2 = the vertical y point where rectangle ends

现在是半径。 将y2和y1之差的半径设置为“一半”

假设您的y2为100,y1为50,则半径将为:

( y2 - y1 )/2
( 100 - 50 )/2 = 25

示例在这里: http://vagminetech.com/rect.htm

对于宽矩形: x1 = 50 x2 = 250 y1 = 50 y2 = 100 r = 25

对于一个高大的矩形  x1 = 50 x2 = 150 y1 = 50 y2 = 150 r = 50

致谢