За последние 24 часа нас посетили 16562 программиста и 1644 робота. Сейчас ищут 1337 программистов ...

Отрисовка пути по координатам

Тема в разделе "Обработка изображений средствами PHP", создана пользователем Lindows, 4 июн 2008.

  1. Lindows

    Lindows Активный пользователь

    С нами с:
    4 июн 2008
    Сообщения:
    5
    Симпатии:
    0
    Адрес:
    Новосибирск
    у меня есть изображение, я его открываю, и мне нужно на него наложить путь, тоесть мне нужно, чтобы в строке, в запросе передовались параметры, т.е. координаты... не совсем понимаю как это сделать, путаюсь с передачей параметров координат, пажалуйста помогите ктонибуть, очень-очень срочно нужно, заранее благодарен.

    цель: сделать карту местности, на которую нужно накладывать путь.
     
  2. wolandino

    wolandino Активный пользователь

    С нами с:
    5 фев 2006
    Сообщения:
    193
    Симпатии:
    0
    Адрес:
    Россия, Астрахань
    Посмотрите класс jpgraph
    В комплекте с ним идет добрая сотня примеров, в том числе и под вашу задачу.
     
  3. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Lindows
    Смените аватару, разрешены только личные фото.
     
  4. Lindows

    Lindows Активный пользователь

    С нами с:
    4 июн 2008
    Сообщения:
    5
    Симпатии:
    0
    Адрес:
    Новосибирск
    Hight, сменил)

    wolandino, к сожалению библиотеки не подойдут, мне нужен конкретный пример... ((
     
  5. BS

    BS Активный пользователь

    С нами с:
    10 апр 2008
    Сообщения:
    149
    Симпатии:
    0
    Так в чем проблема, в передачи координат?
    Можно сформировать параметры, например, таким образом: ?x[]=1&y[]=2&x[]=3&y=5 и в вызываемом скрипте координаты будут доступны через массивы $_GET['x'] и $_GET['y']
     
  6. Lindows

    Lindows Активный пользователь

    С нами с:
    4 июн 2008
    Сообщения:
    5
    Симпатии:
    0
    Адрес:
    Новосибирск
    ок, с этим понятно, тоесть x и y будут масивами, но а как рисовать линию imageline так, чтобы она была от точки к точки?
     
  7. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    http://php.net/imageline
    Смотри список аргументов. Там как раз от точки к точки.
     
  8. Lindows

    Lindows Активный пользователь

    С нами с:
    4 июн 2008
    Сообщения:
    5
    Симпатии:
    0
    Адрес:
    Новосибирск
    сделал так))
    координаты передаю так:
    localhost/?arr[]=146.344&arr[]=157.70&arr[]=514.400&arr[]=572.435&arr[]=565.450&th=6
    все работает.
    Код (Text):
    1.   function imagelinethick($image, $x1, $y1, $x2, $y2, $color, $thick = 1) {
    2.       if ($thick == 1) {
    3.           return imageline($image, $x1, $y1, $x2, $y2, $color);
    4.       }
    5.       $t = $thick / 2 - 0.5;
    6.       if ($x1 == $x2 || $y1 == $y2) {
    7.           return imagefilledrectangle($image, round(min($x1, $x2) - $t), round(min($y1, $y2) - $t), round(max($x1, $x2) + $t), round(max($y1, $y2) + $t), $color);
    8.       }
    9.       $k = ($y2 - $y1) / ($x2 - $x1);
    10.       $a = $t / sqrt(1 + pow($k, 2));
    11.       $points = array(
    12.           round($x1 - (1+$k)*$a), round($y1 + (1-$k)*$a),
    13.           round($x1 - (1-$k)*$a), round($y1 - (1+$k)*$a),
    14.           round($x2 + (1+$k)*$a), round($y2 - (1-$k)*$a),
    15.           round($x2 + (1-$k)*$a), round($y2 + (1+$k)*$a),
    16.       );
    17.       imagefilledpolygon($image, $points, 4, $color);
    18.       return imagepolygon($image, $points, 4, $color);
    19.   }
    20.   header ("Content-type: image/jpg");
    21.   $im = imagecreatefromgif("map.gif");
    22.   $green = imagecolorallocate($im, 0, 189, 31);
    23.   $color = imagecolorallocate($im, 255, 0, 0);
    24.   $as0=explode('.',$arr[0]);
    25.   $x=$as0[0];
    26.   $y=$as0[1];
    27.   for ($i = 0; $i <= count($arr)-1; $i++) {
    28.     $as=explode('.',$arr[$i]);
    29.     $as2=explode('.',$arr[$i+1]);
    30.     $x1=$as[0];
    31.     $y1=$as[1];
    32.     $x2=$as2[0];
    33.     $y2=$as2[1];
    34.     if (($x2 == "") or ($y2 == "")) {
    35.       $x2=$as[0];
    36.       $y2=$as[1];
    37.     }
    38.     imagesetpixel($im,$x,$y,$color);
    39.     imagelinethick($im,$x1,$y1,$x2,$y2,$color,$th);
    40.   }
    41.   imagegif($img);
    теперь у меня другая проблема)
    файл map.gif очень большой (более 5000 точек шириной), мне нужно сделать так, чтобы выводилось тот участок изображения, на ктором наложен путь, но при этом он не должен привышать размера 730 х 300, т.е. видимо придется еще и масштабировать, есть мысли как это реализовать? заранее благодарен))
     
  9. Cron

    Cron Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    289
    Симпатии:
    0
    Адрес:
    Украина, Сумы
    Я бы сделал так: по координатам пути можно выделить тот кусок который тебе нужен. Точнее нам нужен:
    - верхний левый угол
    - высоту и ширину области
    Далее создаешь новое изображение (пока пустое) тех размеров, которые нужны на экране и функцией imagecopyresized подтягиваешь туда необходимую область. Вот и все собственно.