imagefilltoborder

(PHP 4, PHP 5)

imagefilltoborderЗаливка цветом

Описание

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

imagefilltoborder() производит заливку области, ограниченной цветом border. Начальная координата x, y (левый верхний угол имеет координаты 0, 0), а область закрашивается цветом color.

Список параметров

image

Ресурс изображения, полученный одной из функций создания изображений, например, такой как imagecreatetruecolor().

x

x-координата начала.

y

y-координата начала.

border

Цвет границы заливки. Идентификатор цвета, созданный функцией imagecolorallocate().

color

Цвет заливки. Идентификатор цвета, созданный функцией imagecolorallocate().

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Примеры

Пример #1 Закрашивание эллипса

<?php
// создание изображения, установка белого фона
$im imagecreatetruecolor(100100);
imagefilledrectangle($im00100100imagecolorallocate($im255255255));

// рисование эллипса закрашенного черным цветом
imageellipse($im50505050imagecolorallocate($im000));

// установка цвета границы заливки
$border imagecolorallocate($im000);
$fill imagecolorallocate($im25500);

// заливка области
imagefilltoborder($im5050$border$fill);

// вывод и освобождение памяти
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>

Результатом выполнения данного примера будет что-то подобное:

Вывод примера: Закрашивание эллипса

Коментарии

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 (8025);

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

   
$blue  ImageColorAllocate ($im00255);
   
$white  ImageColorAllocate ($im255255255);

     
// draw semi-circle arcs at each end

   
ImageArc($im1212232690270$white);
   
ImageArc($im6712232627090$white);

     
// fill ends outside arcs with color

   
ImageFillToBorder ($im00$white$white);
   
ImageFillToBorder ($im790$white$white);

     
// create the image

   
ImagePng ($im);

     
// destroy the image to free memory

   
ImageDestroy ($im);
?>
2001-01-25 12:18:22
http://php5.kiev.ua/manual/ru/function.imagefilltoborder.html
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($im203040);
 
imagefill($im00$back_color); 
 for (
$i 0$i <= $center$i++)
 {
     
$diametre $width $i;
   
$el_color imagecolorallocate($im$i $colordivs00);
   
imagearc($im$center$center$diametre$diametre0360$el_color);
   
imagefilltoborder($im$center$center$el_color$el_color);
 }
 
imagepng($im);
?>

Dark Skull Software
http://www.darkskull.net
2003-06-11 08:02:48
http://php5.kiev.ua/manual/ru/function.imagefilltoborder.html
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.
2004-09-10 17:54:33
http://php5.kiev.ua/manual/ru/function.imagefilltoborder.html
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_scratch255255255);

 
imagefill($im_scratch00$back_color);

  for (
$i 0$i <= $center$i++) {
   
$diametre $render_width $i;
   
$el_color imagecolorallocate($im_scratch$i $colordivs00);
   
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_scratch0000$requested_width$requested_width$render_width$render_width);

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

?>
2005-05-10 18:08:53
http://php5.kiev.ua/manual/ru/function.imagefilltoborder.html
Автор:
Reply to pritm (.a.t.) mail (.d.0.t.) ru below.

I had a similar problem and solved it thus:

I had to reduce the number of colors on the image I was using. It appeared to be a black and white map, but contained about 50 shades of almost black and almost white. I reduced this to two colors only (also going from JPG to GIF) so that the borders as well as the areas to be filled each were of a consistent shade.

Additionally, it did not work when I specified border colors as black (0,0,0), even though they seem to be of this exact shade in the map file. Instead, I used ImageColorAt() to pick the border color, and now everything seems to work.

Image: http://henrik.nyh.se/dump/map/europe.gif
In action: http://henrik.nyh.se/dump/map/map.html

Source:

<?php

$map 
"europe.gif";

$img ImageCreateFromGIF($map);

// Colors
$border ImageColorAt ($img416111);  // Get color of borders - apparently (0,0,0) won't work
$red ImageColorAllocate($img25500); 
$green ImageColorAllocate($img02550);

// Fill
ImageFillToBorder($img440100$border$red);  // Sweden
ImageFillToBorder($img250290$border$green);  // Great Britain

// Output image as PNG
header("Content-type: image/png");
ImagePNG($img); 
ImageDestroy($img);  // Free memoryu

?>
2005-06-24 04:26:36
http://php5.kiev.ua/manual/ru/function.imagefilltoborder.html
pritm (.a.t.) mail (.d.0.t.) ru, your jpg black areas aren't entirely black, look *real* closely at it! so the fill will "seep through". the solution is simple, use a lossless background image format. replace this line..

<?
$im 
imagecreatefrompng ('map-back.png');
?>

try it with this version of your image..

http://corz.org/public/images/demo/map-back.png
(the colours may be slightly different, just a quick conversion in my regular image viewer)

as you can see, it works perfectly..
http://corz.org/public/images/demo/filled.jpg

;o)
(or
2005-06-27 03:08:47
http://php5.kiev.ua/manual/ru/function.imagefilltoborder.html

    Поддержать сайт на родительском проекте КГБ