Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как нарисовать многоугольник?

Сообщения:  [1-10]   [11-17] 

 
 автор: vitali   (13.03.2008 в 16:31)   письмо автору
 
   для: coloboc66   (13.03.2008 в 15:44)
 

Синтаксис:
imagefilledpolygon() -- Рисование заполненного многоугольника
(Draw a filled polygon)
Описание: bool imagefilledpolygon ( resource image, array points, int num_points, int color )
Создание заполненного многоугольника в изображении

Список параметров
image - Ресурс изображения, возвращанный одной из функций создания изображениq, как например,
imagecreatetruecolor()
points - Массив, содержащий x и y координаты граней многоугольника последовательно, т.е
точки[0] = x0, точки[1] = y0, точки[2] = x1, точки[3] = y1, и т.п.
num_points - Общее число точек (граней) Total number of points (vertices). Общее число граней,
должно быть большим чем 3
color - Цветной идентификатор созданный imagecolorallocate()

Проверьте на корректность Ваш массив, который Вы сформировали из файла.
И палитру сделайте не полноцветной, если хотите иметь прозрачность.

   
 
 автор: coloboc66   (13.03.2008 в 15:44)   письмо автору
 
   для: vitali   (13.03.2008 в 13:22)
 

Ну хорошо, а вот такой вопрос: у меня координаты для вершин многоугольника хранятся в файле в виде строк вида:
one|535,195, 556,197, 562,212, 538,220
two|535,220, 569,220, 562,231, 541,231
Я делаю так:
$items_arr=file('fname.dat');
foreach($items_arr as $row)
{
$row=stripslashes(trim($row));
$row=explode('|',$row);
$arr_coords=explode(',',$row[1]);
$width=...; $height=...; //тут вычисляю размеры холста
$img = imagecreatetruecolor($width,$height);   
$white=imagecolorallocate($img, 255, 255, 255); 
imagefill($img,0,0,$white);     
$color = imagecolorallocate($img, 0, 0, 255); 
//imageColorTransparent($img,$white);
imagefilledpolygon($img,$arr_coords,count($arr_coords)/2,$color); 
imagepng($img,"i/$row[0].png"); 
imagedestroy($img);
echo "<img src=i/$row[0].png />";
}

Но в итоге получаю только пустые холсты. Правильный ли у меня синтаксис для функции imagefilledpolygon() ???

   
 
 автор: vitali   (13.03.2008 в 13:22)   письмо автору
 
   для: coloboc66   (13.03.2008 в 11:58)
 

Ответ наверное здесь:
Замечание: Задание прозрачного цвета поддерживают только палитровые изображения, но не полноцветные
т.е изображения созданные imageCreateFromJpeg() или imageCreateTrueColor() не могут его
содержать
Пример: $ts = imagecolorclosest($im, 0, 255, 0);
imagecolortransparent($im, $ts);

   
 
 автор: coloboc66   (13.03.2008 в 11:58)   письмо автору
 
   для: vitali   (13.03.2008 в 11:55)
 

Может и можно, только у меня пока не получается с приведенным выше примером.

   
 
 автор: vitali   (13.03.2008 в 11:55)   письмо автору
 
   для: coloboc66   (13.03.2008 в 11:07)
 

1) Как построить многоугольник из массива точек - это понятно из предложенных примеров.
2) наложить его в определённое координатами х и у место страницы?
Громоздкий вариант:
- сохранить картинку в /tmp (не забыть в конце работы файл удалить);
- затем используя контейнер <div с указанныими координатами> <img src="/tmp/имя_картинки"> ...</div> поместить в указанное место.
3) мешает непрозрачный холст?
А его нельзя убить функцией imagecolortransparent() -- Определение цвета как прозрачный?

   
 
 автор: coloboc66   (13.03.2008 в 11:55)   письмо автору
 
   для: sim5   (13.03.2008 в 11:38)
 

Почему-то цвет холста (фона) не делается белым?
$img = imagecreatetruecolor(400, 300);  
//заливаем фон 
imagecolorallocate($img, 255, 255, 255);   
// рисуем многоугольник   
$color = imagecolorallocate($img, 0, 0, 255); 
imagefilledpolygon($img, array ( 
        0,   0, 
        100, 200, 
        350, 200, 
    100, 50, 
    150, 20 
     
    ), 
    5, 
    $color); 
imagepng($img,'img1.png'); 
imagedestroy($img);
echo "<img src='img1.png'>";

   
 
 автор: sim5   (13.03.2008 в 11:38)   письмо автору
 
   для: coloboc66   (13.03.2008 в 11:07)
 

Цвет холста (а без него никак нельзя) берете равный цвету страницы, получаете картинку верхние левые координаты которой привязываете к заданным Х, Y на странице.

   
 
 автор: coloboc66   (13.03.2008 в 11:07)   письмо автору
 
   для: vitali   (13.03.2008 в 10:04)
 

За предложение поразвлечься спасибо, но мне нужно решить конкретную задачу: по массиву точек построить многоугольник и наложить его в определённое координатами х и у место страницы. Как это сделать? Во-первых, мешает непрозрачный холст, потому что сам по себе холст мне на странице не нужен...

   
 
 автор: vitali   (13.03.2008 в 10:04)   письмо автору
 
   для: coloboc66   (13.03.2008 в 09:08)
 

Развлекитесь:

<?php ## Рисование заполненного текстурой многоугольника 
/**
** (кол-во углов вычисляются с помощью генератора случайных чисел после каждого обновления страницы)
**/
  
$fname "…/fon.jpg"// Ваша текстура многоугольника
$tile imagecreatefromjpeg($fname); //текстура фона
$image imagecreatetruecolor(800800); //создаем палитру
imagefill($image00imagecolorallocate($image02550)); //закрашиваем область определ.(.)0,0
imagesettile($image$tile); //заполняем образ текстурой
// установление массива точек для многоугольника (set up array of points for polygon)
$p = array();
for (
$i=0$i<9$i++)
 {
   
array_push($pmt_rand(0imagesx($image)), mt_rand(0imagesy($image)));
   
//Добавляем произвольные эл-ты в конец массива
 
}

// Рисуем заполненный многоугольник (draw a polygon)
imagefilledpolygon($image$pcount($p)/2IMG_COLOR_TILED);

// flush image
header('Content-type: image/jpeg');
imagejpeg($image''100); //качество картинки = 100
imagedestroy($image);
?>

   
 
 автор: coloboc66   (13.03.2008 в 09:08)   письмо автору
 
   для: Max Vasin   (12.03.2008 в 18:17)
 

А без фона (холста) никак нельзя? И он обязательно должен быть прямоугольным? А как бы так сделать, чтобы фон повторял форму многоугольника, т.е. чтобы можно было наложить на страницу не прямоугольник, а многоугольник?

   

Сообщения:  [1-10]   [11-17] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования