PHP Doku:: Zeichnet ein Rechteck - function.imagerectangle.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzBildverarbeitung und -generierungBildbearbeitung und GDGD- und Image-Funktionenimagerectangle

Ein Service von Reinhard Neidl - Webprogrammierung.

GD- und Image-Funktionen

<<imagepstext

imagerotate>>

imagerectangle

(PHP 4, PHP 5)

imagerectangleZeichnet ein Rechteck

Beschreibung:

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

ImageRectangle() erzeugt ein Rechteck mit der Linienfarbe col, beginnend bei der oberen linken Koordinate X1 und Y1. Das Ende liegt bei der unteren rechten Koordinate X2 und Y2. Dabei ist 0, 0 die linke obere Ecke des Bildes im.


7 BenutzerBeiträge:
- Beiträge aktualisieren...
rogier
27.06.2007 14:27
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(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 ;)
Corey
14.02.2007 0:09
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
4.05.2006 16:28
<?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
carl at pappenheim dot net
20.02.2006 12:02
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);
?>
matt at bargolf dot net
30.01.2006 23:25
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
17.12.2002 18:21
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
28.11.2000 7:41
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
?>



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)