Примеры использования функций библиотеки 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;





