вторник, 30 января 2018 г.

Как нарисовать человечка на PHP


В сети популярны картинки из серии "Ожидание - реальность". Нечто подобное случилось и со мной сегодня.
В общем нашел в сети веселое задание по программированию на PHP. Вот такое примерно было условие:
Нарисовать программно человечка средствами PHP, чтобы у него было:
  1. Туловище
  2. Ноги
  3. Руки
  4. Глаза
  5. Уши
  6. Нос
Я взял тетрадный лист, разметил систему координат по принципу, принятому в PHP, запустил OpenServer и Notepad++ и начал кодить своего человечка.
Причем я сразу понял, что выполнять задание будет гораздо интереснее, если я сначала напишу весь код, а потом посмотрю что получится. Так я и сделал.
Начал я с рисования лица, сделал его овальным (не люблю круглые лица), потом рисовал глаза, сделал их голубыми. Потом нарисовал рот и нос. Уши и в конце уже  тело (в виде палочки - заморачиваться не стал), а так же руки и ноги.

Собственно вот мой код:
$ris = imagecreatetruecolor(640,480);
$color = imageColorAllocate($ris,255,204,153);//цвет кожи
imageArc($ris,320,119,29,51,0,360,$color);//рисуем голову

$color = imageColorAllocate($ris,0,102,255);//цвет глаз
imageArc($ris,305,102,8,8,0,360,$color);//правый глаз
imageSetPixel($ris,305,102,$color);//правый зрачок
imageArc($ris,335,102,8,8,0,360,$color);//левый глаз
imageSetPixel($ris,335,102,$color);//левый зрачок

$color = imageColorAllocate($ris,255,102,102);//цвет носа
imageLine($ris,320,102,309,122,$color);//нос 1
imageLine($ris,309,122,320,117,$color);//нос 2

$color = imageColorAllocate($ris,255,51,20);//цвет рта
imageArc($ris,320,128,15,12,15,165,$color);//рот

$color = imageColorAllocate($ris,255,204,153);//цвет кожи = цвет ушей
imageArc($ris,335,119,11,17,-93,93,$color);//левое ухо
imageArc($ris,305,119,11,17,87,273,$color);//правое ухо

imageLine($ris,320,145,320,308,$color);//тело
imageLine($ris,320,206,262,274,$color);//правая рука
imageLine($ris,320,206,378,274,$color);//левая рука
imageLine($ris,320,308,262,412,$color);//правая нога
imageLine($ris,320,308,378,412,$color);//левая нога

header('Content-Type: image/jpeg');
imageJpeg($ris);
imageJpeg($ris,'man.jpg');
imagedestroy($ris);

А вот и картинка в стиле "Ожидание-реальность":
Когда я увидел результат, я сильно удивился. Я немного где-то неверно рассчитал размер лица, но исправлять уже не стал, так как этот тот редкий случай когда реальность превзошла все ожидания в самом хорошем смысле. Честно сказать, изначально результат был не такой: уши и сама голова висели в воздухе и я немного подправил результат. Моя жена сказала, что рисунок чем-то поход на ленивца Сида из "Ледникового периода". А мне кажется, что нарисованный человечек чем-то похож на меня :)

0 коммент.:

Отправить комментарий