Примеры использования функций библиотеки GD для рисования линий.
За отрисовку линии отвечает функция imageline($image, $x1, $y1, $x2, $y2, $color)
соединяя две точки.
// Создаем изображение с белым фоном
$im = imagecreatetruecolor(600, 250);
imagefill($im, 0, 0, 0xFFFFFF);
// Красная линия
$color = imagecolorallocate($im, 255, 0, 0);
imageline($im, 100, 50, 100, 200, $color);
// Зелёная линия
$color = imagecolorallocate($im, 0, 255, 0);
imageline($im, 200, 200, 350, 200, $color);
// Синяя линия
$color = imagecolorallocate($im, 0, 0, 255);
imageline($im, 400, 50, 550, 200, $color);
header('Content-Type: image/png');
imagepng($im);
exit();
Результат:
Что бы сделать линию полупрозрачной, нужно задать цвет с помощью функции imagecolorallocatealpha($image, $red, $green, $blue, $alpha)
, где $alpha
значение от 0 до 127 (127 полностью прозрачный).
// Создаем изображение с белым фоном
$im = imagecreatetruecolor(600, 250);
imagefill($im, 0, 0, 0xFFFFFF);
// Красная линия
$color = imagecolorallocatealpha($im, 255, 0, 0, 65);
imageline($im, 100, 50, 100, 200, $color);
// Зелёная линия
$color = imagecolorallocatealpha($im, 0, 255, 0, 65);
imageline($im, 200, 200, 350, 200, $color);
// Синяя линия
$color = imagecolorallocatealpha($im, 0, 0, 255, 65);
imageline($im, 400, 50, 550, 200, $color);
header('Content-Type: image/png');
imagepng($im);
exit();
Результат:
Толщину линий задает функция imagesetthickness($image, $thickness)
.
// Создаем изображение с белым фоном
$im = imagecreatetruecolor(600, 250);
imagefill($im, 0, 0, 0xFFFFFF);
// Красная линия 2px
imagesetthickness($im, 2);
$color = imagecolorallocate($im, 255, 0, 0);
imageline($im, 100, 50, 100, 200, $color);
// Зелёная линия 5px
imagesetthickness($im, 5);
$color = imagecolorallocate($im, 0, 255, 0);
imageline($im, 200, 200, 350, 200, $color);
// Синяя линия 6px
imagesetthickness($im, 6);
$color = imagecolorallocate($im, 0, 0, 255);
imageline($im, 400, 50, 550, 200, $color);
header('Content-Type: image/png');
imagepng($im);
exit();
Результат:
Функция imagedashedline($image, $x1, $y1, $x2, $y2, $color)
рисует пунктирную линию, но эта функция устарела.
// Создаем изображение с белым фоном
$im = imagecreatetruecolor(600, 250);
imagefill($im, 0, 0, 0xFFFFFF);
// Красная пунктирная линия
$color = imagecolorallocate($im, 255, 0, 0);
imagedashedline($im, 100, 50, 100, 200, $color);
// Зелёная пунктирная линия
$color = imagecolorallocate($im, 0, 255, 0);
imagedashedline($im, 200, 200, 350, 200, $color);
// Синяя пунктирная линия
$color = imagecolorallocate($im, 0, 0, 255);
imagedashedline($im, 400, 50, 550, 200, $color);
header('Content-Type: image/png');
imagepng($im);
exit();
Результат:
Предлагается использовать функцию imageline()
со стилем назначенным через imagesetstyle($image, $style)
, где $style
массив, в котором попиксельно содержится паттерн цветов.
// Создаем изображение с белым фоном
$im = imagecreatetruecolor(600, 250);
imagefill($im, 0, 0, 0xFFFFFF);
// Красная пунктирная линия
$color_1 = imagecolorallocate($im, 255, 0, 0);
$color_2 = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagesetstyle($im, array($color_1, $color_1, $color_1, $color_1, $color_2, $color_2));
imageline($im, 100, 50, 100, 200, IMG_COLOR_STYLED);
// Зелёная пунктирная линия
$color_1 = imagecolorallocate($im, 0, 255, 0);
$color_2 = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagesetstyle($im, array($color_1, $color_1, $color_1, $color_1, $color_2, $color_2));
imageline($im, 200, 200, 350, 200, IMG_COLOR_STYLED);
// Синяя пунктирная линия
$color_1 = imagecolorallocate($im, 0, 0, 255);
$color_2 = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagesetstyle($im, array($color_1, $color_1, $color_1, $color_1, $color_2, $color_2));
imageline($im, 400, 50, 550, 200, IMG_COLOR_STYLED);
header('Content-Type: image/png');
imagepng($im);
exit;
Результат:
Толщина пунктирной линии
Если использовать функцию imagesetthickness()
, то она работает не совсем корректно, например:
// Создаем изображение с белым фоном
$im = imagecreatetruecolor(600, 250);
imagefill($im, 0, 0, 0xFFFFFF);
// Толщина линий
imagesetthickness($im, 5);
// Красная пунктирная линия
$color_1 = imagecolorallocate($im, 255, 0, 0);
$color_2 = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagesetstyle($im, array($color_1, $color_1, $color_1, $color_1, $color_2, $color_2));
imageline($im, 100, 50, 100, 200, IMG_COLOR_STYLED);
// Зелёная пунктирная линия
$color_1 = imagecolorallocate($im, 0, 255, 0);
$color_2 = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagesetstyle($im, array($color_1, $color_1, $color_1, $color_1, $color_2, $color_2));
imageline($im, 200, 200, 350, 200, IMG_COLOR_STYLED);
// Синяя пунктирная линия
$color_1 = imagecolorallocate($im, 0, 0, 255);
$color_2 = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagesetstyle($im, array($color_1, $color_1, $color_1, $color_1, $color_2, $color_2));
imageline($im, 400, 50, 550, 200, IMG_COLOR_STYLED);
header('Content-Type: image/png');
imagepng($im);
exit;