GD and Image 函数
在线手册:中文  英文

imagerectangle

(PHP 4, PHP 5)

imagerectangle画一个矩形

说明

bool imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col )

imagerectangle()col 颜色在 image 图像中画一个矩形,其左上角坐标为 x1, y1,右下角坐标为 x2, y2。图像的左上角坐标为 0, 0。


GD and Image 函数
在线手册:中文  英文

用户评论:

rogier (2007-06-27 05:27:43)

In addition to Corey's note, this is the kind of code he means. Note that I always draw an outer grid border, so drawing lines will always take 
1 + ceil((rows+cols)/2) actions. For a 20X20 grid, this means 21 actions, a 10X25 grid takes 19 Actions

<?php

function draw_grid(&$img$x0$y0$width$height$cols$rows$color) {
    
//draw outer border
    
imagerectangle($img$x0$y0$x0+$width*$cols$y0+$height*$rows$color);
    
//first draw horizontal
    
$x1 $x0;
    
$x2 $x0 $cols*$width;
    for (
$n=0$n<ceil($rows/2); $n++) {
        
$y1 $y0 2*$n*$height;
        
$y2 $y0 + (2*$n+1)*$height;
        
imagerectangle($img$x1,$y1,$x2,$y2$color);
    }
    
//then draw vertical
    
$y1 $y0;
    
$y2 $y0 $rows*$height;
    for (
$n=0$n<ceil($cols/2); $n++) {
        
$x1 $x0 2*$n*$width;
        
$x2 $x0 + (2*$n+1)*$width;
        
imagerectangle($img$x1,$y1,$x2,$y2$color);
    }
}

//example
$img imagecreatetruecolor(300200);
$red   imagecolorallocate($img255,   0,   0);
draw_grid($img0,0,15,20,20,10,$red);
header("Content-type: image/png");
imagepng($img);
imagedestroy($img);
?>
have fun ;)

Corey (2007-02-13 15:09:40)

Matt,
I agree that drawing 100 boxes for a 10x10 square is ludicrous. However, if we're going to talk about the best way to draw it in GD, you're still off.
Since a rectangle will draw two vertical lines in one draw, we should use it to our advantage. You can draw 5 rectangles that have the tops and bottoms outside of the image, and there you have your ten rows. Draw 5 more who's sides are out of the image and you have your columns. We just drew a 10x10 (you could do 11x11) grid in 10 draw operations.
:)

administrador(ensaimada)sphoera(punt)com (2006-05-04 07:28:19)

<?php
// With this function you will draw rounded corners rectangles with transparent colors. 
// Empty (not filled) figures are allowed too!!

function draw_roundrectangle($img$x1$y1$x2$y2$radius$color,$filled=1) {
    if (
$filled==1){
        
imagefilledrectangle($img$x1+$radius$y1$x2-$radius$y2$color);
        
imagefilledrectangle($img$x1$y1+$radius$x1+$radius-1$y2-$radius$color);
        
imagefilledrectangle($img$x2-$radius+1$y1+$radius$x2$y2-$radius$color);

        
imagefilledarc($img,$x1+$radius$y1+$radius$radius*2$radius*2180 270$colorIMG_ARC_PIE);
        
imagefilledarc($img,$x2-$radius$y1+$radius$radius*2$radius*2270 360$colorIMG_ARC_PIE);
        
imagefilledarc($img,$x1+$radius$y2-$radius$radius*2$radius*290 180$colorIMG_ARC_PIE);
        
imagefilledarc($img,$x2-$radius$y2-$radius$radius*2$radius*2360 90$colorIMG_ARC_PIE);
    }else{
        
imageline($img$x1+$radius$y1$x2-$radius$y1$color);
        
imageline($img$x1+$radius$y2$x2-$radius$y2$color);
        
imageline($img$x1$y1+$radius$x1$y2-$radius$color);
        
imageline($img$x2$y1+$radius$x2$y2-$radius$color);

        
imagearc($img,$x1+$radius$y1+$radius$radius*2$radius*2180 270$color);
        
imagearc($img,$x2-$radius$y1+$radius$radius*2$radius*2270 360$color);
        
imagearc($img,$x1+$radius$y2-$radius$radius*2$radius*290 180$color);
        
imagearc($img,$x2-$radius$y2-$radius$radius*2$radius*2360 90$color);
    }                
}

?>
More functions at http://www.sphoera.com

carl at pappenheim dot net (2006-02-20 03:02:44)

Oh I don't know.  He was on the right track..

<?php

$rows 
5;
$cols 11;
$eachx 12;
$eachy 18;

$max = array($cols*$eachx$rows*$eachy);
$im imagecreatetruecolor($max[0]+1,$max[1]+1);
$white imagecolorallocate($im,255,255,255);
imagefill($im,0,0,$white);

$black imagecolorallocate($im,50,50,50);

for(
$x=$max[0]/2;$x>=0;$x-=$eachx) {
    
imagerectangle($im, ($max[0]/2)+$x,0, ($max[0]/2)-$x,$max[1], $black);
}
for(
$y=$max[1]/2;$y>=0;$y-=$eachy) {
    
imagerectangle($im0,($max[1]/2)+$y$max[0],($max[1]/2)-$y$black);
}

header("Content-type: image/jpeg");
imagejpeg($im,'',80);
imagedestroy($im);
?>

matt at bargolf dot net (2006-01-30 14:25:27)

Lets not do it Mr Benson's way OK!
I'm sure if I had to draw a 10x10 grid on paper I wouldn't do it by drawing 100 individual squares, redrawing nearly half of the lines twice.
I'd probably do it by drawing 11 vertical lines and 11 horizontal lines.
function ImageGrid2(&$im,$startx,$starty,$width,$height,$xcols,$yrows,&$color) {
$endy = $starty + $height * $yrows;
for ( $x=0; $x <= $xcols; $x++ ) {
$x1 = $startx + $width * $x;
imageline ( $im, $x1, $starty, $x1, $endy, $color );
}
$endx = $startx + $width * $xcols;
for ( $y=0; $y <= $yrows; $y++ ) {
$y1 = $starty + $height * $y;
imageline ( $im, $startx, $y1, $endx, $y1, $color );
}
}

eustaquiorangel at yahoo dot com (2002-12-17 09:21:54)

If you want an empty rectangle, I mean, just the borders, fill it first with the ImageFilledRectangle function with the background color and then draw it with this function.

jbenson at technologist dot com (2000-11-27 22:41:36)

For those wanting a function to draw a grid I've created one.  I hope this is the right place to post it.

<?php
function ImageGrid(&$im,$startx,$starty,$width,$height,$xcols,$yrows,&$color) {

for ( 
$x=0$x $xcols$x++ ) {
   for ( 
$y=0$y $yrows$y++ ) {
      
$x1 $startx + ($width $x);
      
$x2 $startx + ($width * ($x+1));
      
$y1 $starty + ($height $y);
      
$y2 $starty + ($height * ($y+1));
      
ImageRectangle($im$x1$y1$x2$y2$color);
   }
}

// end function ImageGrid
?>

易百教程