# imagerectangle

(PHP 4, PHP 5, PHP 7)

imagerectangle画一个矩形

### 说明

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

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

### User Contributed Notes 7 notes

stanislav dot eckert at vizson dot de
5 years ago
``` Please pay attention if you want to draw pixel perfect rectangles: Since this function uses absolute values for the second coordinate points (instead of width and height), you might face a logical problem. PHP counts from 0. But a pixel at position 0,0 occupies already a 1x1 space. In the example above you have the following line:imagerectangle(\$canvas, 50, 50, 150, 150, \$pink);If you don't pay attention, you might thing that the difference between the two coordinates is exactly 100 and assume that the drawn rectangle would have the dimension of 100 x 100 pixels too. But it would be 101 x 101, because PHP counts from 0 and imagerectangle() uses absolute coordinates for the second point too. A smaller example: A rectangle with coordinates 0,0 and 5,5 means 0,1,2,3,4,5 which are 6 pixels, not 5. ```
eustaquiorangel at yahoo dot com
18 years ago
``` 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. ```
rogier
13 years ago
``` 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<?phpfunction 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(300, 200);\$red   = imagecolorallocate(\$img, 255,   0,   0);draw_grid(\$img, 0,0,15,20,20,10,\$red);header("Content-type: image/png");imagepng(\$img);imagedestroy(\$img);?>have fun ;) ```
-3
carl at pappenheim dot net
14 years ago
``` 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(\$im, 0,(\$max[1]/2)+\$y, \$max[0],(\$max[1]/2)-\$y, \$black);}header("Content-type: image/jpeg");imagejpeg(\$im,'',80);imagedestroy(\$im);?> ```
-6
``` <?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*2, 180 , 270, \$color, IMG_ARC_PIE);        imagefilledarc(\$img,\$x2-\$radius, \$y1+\$radius, \$radius*2, \$radius*2, 270 , 360, \$color, IMG_ARC_PIE);        imagefilledarc(\$img,\$x1+\$radius, \$y2-\$radius, \$radius*2, \$radius*2, 90 , 180, \$color, IMG_ARC_PIE);        imagefilledarc(\$img,\$x2-\$radius, \$y2-\$radius, \$radius*2, \$radius*2, 360 , 90, \$color, IMG_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*2, 180 , 270, \$color);        imagearc(\$img,\$x2-\$radius, \$y1+\$radius, \$radius*2, \$radius*2, 270 , 360, \$color);        imagearc(\$img,\$x1+\$radius, \$y2-\$radius, \$radius*2, \$radius*2, 90 , 180, \$color);        imagearc(\$img,\$x2-\$radius, \$y2-\$radius, \$radius*2, \$radius*2, 360 , 90, \$color);    }                }?>More functions at http://www.sphoera.com ```
``` 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 );    }} ```
``` 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. :) ```