Справочник по PHP - white cat
Шрифт:
Интервал:
Закладка:
imageColorClosest
Получение цвета палитры, наиболее близкого к указанному.
Синтаксис:
int imageColorClosest(int im, int red, int green, int blue)
Вместо того, чтобы пытаться выискать свободное место в палитре цветов, эта функция просто возвращает идентификатор цвета, уже существующего в рисунке и находящегося ближе всего к затребованному. Таким образом, нового цвета в палитру не добавляется. Если палитра не велика, то функция может вернуть не совсем тот цвет, который вы ожидаете. Например, в палитре из трех цветов "красный-зеленый-синий" на запрос желтого цвета будет, скорее всего, возвращен идентификатор зеленого - он ближе всего с точки зрения GD соответствует понятию "зеленый".
imageColorTransparent
Определение цвета прозрачности.
Синтаксис:
int imageColorTransparent(int im [,int color])
Эта функция указывает GD, что соответствующий цвет color (заданный своим идентификатором при помощи функции imageColorAllocate()) в изображении im (im - идентификатор изображения, заданный функцией imageCreate()) должен обозначиться как прозрачный. Возвращает идентификатор установленного до этого прозрачного цвета, либо false, если таковой не был определен ранее.
Надо отметить, что не все форматы поддерживают задание прозрачного цвета - например, JPEG не может его содержать.
imageColorsForIndex
Получение RGB-составляющих элемента палитры.
Синтаксис:
array imageColorsForIndex(int im, int index)
Функция возвращает ассоциативный массив с ключами red, green, blue (именно в таком порядке), которым соответствуют значения, равные величинам компонент RGB в идентификаторе цвета index. Но мы можем и не обращать особого внимания на ключи и преобразовать возвращенное значение как список:
<?php
. . .
$color=imageColorAt($im,0,0);
list($r,$g,$b)=array_values(imageColorsForIndex($im,$color));
echo "R=$r, g=$g, b=$b";
. . .
?>
imageColorAt
Возвращает индекс цвета точки.
Синтаксис:
int imageColorAt(int im, int x, int y)
Эта функция возвращает цвет точки, расположенной на координатах (x, y).Если PHP скомпилирован с GD library 2.0 или выше, а картинка - truecolor, то эта функция возвратит идентификатор цвета, а не его RGB-представление.
<?php
$im = imageCreateFromPng("file.png");
$rgb = ImageColorAt($im, 100, 100);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
?>
imageColorsTotal
Получение количества цветов в палитре.
Синтаксис:
int imageColorsTotal(int im)
Функция возвращает число цветов в палитре указанного изображения.
imageColorExact
Получение индекса цвета палитры.
Синтаксис:
int imageColorExact(int im, int red, int green, int blue)
Функция возвращает индекс указанного цвета (red, green, blue) в палитре изображения im.
Функция возвратит -1, если указанного цвета нет в палитре изображения.
imageColorResolve
Нахождение или создание указанного цвета.
Синтаксис:
int imageColorResolve(int im, int red, int green, int blue)
Функция возвращает индекс указанного цвета (red, green, blue) в палитре изображения im.
В случае, если такой цвет в палитре отсутствует, то он создается.
imageGammaCorrect
Применение гамма-коррекции рисунка.
Синтаксис:
int imageGammaCorrect(int im, double inputgamma, double outputgamma)
Эта функция производит исправления гаммы к изображению, заданному дескриптором im.Параметр inputgamma задает входную гамму, а outputgamma - гамму вывода.
Графические примитивы
imageSetPixel
Рисует пиксель.
Синтаксис:
int imageSetPixel(int im, int x, int y, int color)
Выводит один пиксель цвета color в изображении im, расположенный в точке (x, y).
imageLine
Рисует сплошную тонкую линию.
Синтаксис:
int imageLine(int im, int x1, int y1, int x2, int y2, int color)
Эта функция рисует сплошную тонкую линию в изображении im, проходящую через точки (x1, y1) и (x2, y2), цветом color. Линия получается слабо связанной.
<?php
function imagelinethick($image, $x1, $y1, $x2, $y2, $color, $thick = 1)
{
/* this way it works well only for orthogonal lines
imagesetthickness($image, $thick);
return imageline($image, $x1, $y1, $x2, $y2, $color);
*/
if ($thick == 1) {
return imageline($image, $x1, $y1, $x2, $y2, $color);
}
$t = $thick / 2 - 0.5;
if ($x1 == $x2 || $y1 == $y2) {
return imagefilledrectangle($image,
round(min($x1, $x2) - $t),
round(min($y1, $y2) - $t),
round(max($x1, $x2) + $t),
round(max($y1, $y2) + $t), $color);
}
$k = ($y2 - $y1) / ($x2 - $x1); //y = kx + q
$a = $t / sqrt(1 + pow($k, 2));
$points = array(
round($x1 - (1+$k)*$a), round($y1 + (1-$k)*$a),
round($x1 - (1-$k)*$a), round($y1 - (1+$k)*$a),
round($x2 + (1+$k)*$a), round($y2 - (1-$k)*$a),
round($x2 + (1-$k)*$a), round($y2 + (1+$k)*$a),
);
imagefilledpolygon($image, $points, 4, $color);
return imagepolygon($image, $points, 4, $color);
};
?>
imageDashedLine
Рисует пунктирную линию.
Синтаксис:
int imageDashedLine(int im, int x1, int y1, int x2, int y2, int color)
Эта функция работает почти так же, как и imageLine(), только рисует не сплошную, а пунктирную линию. К сожалению, ни размер, ни шаг штрихов задавать нельзя, так что, если вам обязательна нужна пунктирная линия произвольной фактуры, придется заняться математическими расчетами и использовать imageLine().
imageRectangle
Рисует прямоугольник.
Синтаксис:
int imageRectangle(int im, int x1, int y1, int x2, int y2, int color)
Эта функция рисует в изображении im прямоугольник с границей толщиной 1 пиксель цветом color.
Левый верхний угол задается (x1, y1), а правый нижний - (x2, y2).
imageFilledRectangle
Зарисовка прямоугольной области.
Синтаксис:
int imageFilledRectangle(int im, int x1, int y1, int x2, int y2, int color)
Эта функция рисует закрашенный прямоугольник в изображении, заданном идентификатором im, цветом color (полученным, например, при помощи функции imageColorAllocate()). Координаты (x1, y1) и (x2, y2) задают координаты верхнего левого и правого нижнего углов, соответственно (отсчет, как обычно, начинается с верхнего угла и идет слева направо и сверху вниз).
Эта функция часто применяется для того, чтобы целиком закрасить только что созданный рисунок, например, прозрачным цветом:
<?php
$im=imageCreate(100,100);
$color=imageColorAllocate($i,0,0,0);
imageColorTransparent($im,$color);
imageFilledRectangle($im,0,0,imageSX($im)-1,imageSY($im)-1,$color);
// дальше работаем с изначально прозрачным фоном
?>
imageArc
Рисование части эллипса.
Синтаксис:
int imageArc(int im, int cx, int cy, int w, int h, int s, int e, int color)
Эта функция рисует в изображении im дугу сектора эллипса от угла s до e (углы указываются в градусах против часовой стрелки, отсчитываемых от горизонтали). Эллипс рисуется такого размера, чтобы вписываться в прямоугольник (w, h), где w и h задают его ширину и высоту. cx и cy - координаты центра эллипса. Сама фигура не закрашивается, обводится только ее контур, для чего используется цвет color.
<?php
// создаем изображение размером 200x200
$img = imagecreate(200, 200);
// задаем цвет окружности
$white = imagecolorallocate($img, 255, 255, 255);
// рисуем окружность
imagearc($img, 100, 100, 150, 150, 0, 360, $white);
// вывод рисунка в браузер
header("Content-type: image/png");
imagepng($img);
// закрытие рисунка
imagedestroy($img);
?>
imageFill
Заливка цветом ограниченной области.
Синтаксис:
int imageFill(int im, int x, int y, int color)
Эта функция выполняет сплошную заливку одноцветной области, содержащей точку с координатами (x, y) цветом color. Нужно замерить, что современные алгоритмы заполнения работают довольно эффективно, так что не стоит особо заботиться о скорости ее работы. Будут закрашены только те точки, к которым можно проложить "одноцветный сильно связанный путь" из точки x, y.
Две точки называются связанными сильно, если у них совпадает, по крайней мере, одна координата, а по другой координате они отличаются не более, чем на 1 в любую сторону.