search for in the  
<imagefilledrectangleimagefilter>
Last updated: Thu, 19 May 2005

imagefilltoborder

(PHP 3, PHP 4, PHP 5)

imagefilltoborder -- Flood fill to specific color

Description

int imagefilltoborder ( resource image, int x, int y, int border, int color )

imagefilltoborder() performs a flood fill whose border color is defined by border. The starting point for the fill is x, y (top left is 0, 0) and the region is filled with color color.



User Contributed Notes
imagefilltoborder
sbuchanan at datadiver dot net
10-May-2005 05:08
edrad's pseudo-sphere is pretty nice, but a few tweeks really improve it.  (writing out the image header so a browser actually understands it and calling imagedestroy() so we clean up memory are nice things to do, too).  Try drawing it at twice the size and then resampling it down.  Takes more CPU, but it forces antialiasing, creating a smooth arc.  Also, render it at diameter = (width - 1) * 2.  Taking one pixel off the outside keeps it off the image edge, eliminating those ugly flat spots.  Render it on white first so you can really see the edge, then switch back to the cool grey...

Oh, and use imagecreatetruecolor instead of imagecreate if you have it available.

I agree that imageellipse is easier, though.  Actually, I generate rounded corners with drop-shadows for CSS with imagefilledarc (kind of a blend of the two)  Use imagefilledellipse if drawing the whole thing, use imagefilledarc if only drawing part of it (like a corner).  If you use the 'filled' functions you can skip imagefilltoborder altogether :P

Anyway, try this for a smoother image:

<?php

  $requested_width
= 300;
 
$render_width = ($requested_width * 2) - 1; // -1 to back away from edge, removing flat spot
 
$center = $render_width / 2
 
$colordivs = 255 / $center;
 
$im_scratch = @imagecreate($render_width, $render_width);

 
//$back_color = imagecolorallocate($im_scratch, 20, 30, 40);  // try it with white so you can really see the edge first..
 
$back_color = imagecolorallocate($im_scratch, 255, 255, 255);

 
imagefill($im_scratch, 0, 0, $back_color);

  for (
$i = 0; $i <= $center; $i++) {
  
$diametre = $render_width - 2 * $i;
  
$el_color = imagecolorallocate($im_scratch, $i * $colordivs, 0, 0);
  
imageellipse($im_scratch, $center, $center, $diametre, $diametre, $el_color);
  
imagefilltoborder($im_scratch, $center, $center, $el_color, $el_color);
  }

 
// resample down, causes antialiasing, nice smooth curve!
 
$im = @imagecreatetruecolor($requested_width, $requested_width);
 
imagecopyresampled($im, $im_scratch, 0, 0, 0, 0, $requested_width, $requested_width, $render_width, $render_width);

 
header ("Content-type: image/png");
 
imagepng($im);
 
ImageDestroy($im);
 
ImageDestroy($im_scratch);

?>
admin at worldlanguages dot tk
10-Sep-2004 04:54
In the example below, for those with newer GD versions, it makes more sense to replace:

imagearc($im, $center, $center, $diametre, $diametre, 0, 360, $el_color);

with:

imageellipse($im, $center, $center, $diametre, $diametre, $el_color);

This is obviously simpler.
edrad at wanadoo dot fr
11-Jun-2003 07:02
Very useful to build a pseudo-sphere with a color gradient...

<?php
 $width
= 300;
 
$center = $width / 2;
 
$colordivs = 255 / $center;
 
$im = @imagecreate($width, $width);
 
$back_color = imagecolorallocate($im, 20, 30, 40);
 
imagefill($im, 0, 0, $back_color);
 for (
$i = 0; $i <= $center; $i++)
 {
    
$diametre = $width - 2 * $i;
  
$el_color = imagecolorallocate($im, $i * $colordivs, 0, 0);
  
imagearc($im, $center, $center, $diametre, $diametre, 0, 360, $el_color);
  
imagefilltoborder($im, $center, $center, $el_color, $el_color);
 }
 
imagepng($im);
?>

Dark Skull Software
http://www.darkskull.net
ecofarm at mullum dot com dot au
25-Jan-2001 12:18
Great for getting that rounded button look we see a lot of at php.net ... try this sample. (remember to change png to whatever image format your version of php supports)

<?php

   Header
("Content-type: image/png");


    
///// create canvas  /////

  
$im = ImageCreate (80, 25);

 
//define colors.. first color declared is set as background

  
$blue  = ImageColorAllocate ($im, 0, 0, 255);
  
$white  = ImageColorAllocate ($im, 255, 255, 255);

    
// draw semi-circle arcs at each end

  
ImageArc($im, 12, 12, 23, 26, 90, 270, $white);
  
ImageArc($im, 67, 12, 23, 26, 270, 90, $white);

    
// fill ends outside arcs with color

  
ImageFillToBorder ($im, 0, 0, $white, $white);
  
ImageFillToBorder ($im, 79, 0, $white, $white);

    
// create the image

  
ImagePng ($im);

    
// destroy the image to free memory

  
ImageDestroy ($im);
?>

<imagefilledrectangleimagefilter>
 Last updated: Thu, 19 May 2005
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: The Server Pages
Last updated: Thu May 19 17:35:34 2005 CDT