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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Рисование РНР, есть ли выход из такой ситуации?
 
 автор: coloboc66   (14.03.2008 в 09:42)   письмо автору
 
 

В файле лежат координаты многоугольников:
$str_coords='535,195,556,197,562,212,538,220';
Многоугольнички маленькие, с максимальной диагональю около 30 пиксел. Мне нужно достать из файла строки с координатами, нарисовать эти многоугольнички и расставить их на странице в соответствии с этими координатами. Но вот в чём проблема: размер холста мне тоже нужен маленький, к примеру:
$img = imagecreatetruecolor(30, 20);
Но если я делаю такой размер холста, то отрисованный многоугольник на него не попадает и в итоге в графический файл записывается только пустой холст.
Вот дальнейший тестовый код:
$arr_coords=explode(',',$str_coords);
$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,'img1.png'); 
imagedestroy($img);
echo "<img src=img1.png /></div>";

Если сделать размер холста 600Х600, то многоугольник на него попадёт, но мне не годится файл с такими размерами. Как можно выйти из такой ситуации?
Спасибо.

   
 
 автор: vitali   (14.03.2008 в 11:35)   письмо автору
 
   для: coloboc66   (14.03.2008 в 09:42)
 

Доброе время суток.
Вы не там "копаете", Ваша проблема с разбором файла, т.е. неверно получаете массив координат. Ваш пример слегка модифицированный работает!

<?php
$coord 
= array(11807251525210825, );
$img imagecreatetruecolor(3020);
//заливаем фон
imagecolorallocate($img255255255);
// рисуем многоугольник
$color imagecolorallocate($img00255);
imagefilledpolygon($img$coord5$color);
#imagecolortransparent($img, $color);
Header("Content-type: image/png");
imagepng($img);
imagedestroy($img);
##echo "<img src='img1.png'>";
?>

   
 
 автор: coloboc66   (14.03.2008 в 12:35)   письмо автору
 
   для: vitali   (14.03.2008 в 11:35)
 

Этот пример работает потому, что размеры палитры захватывают координаты вершин. В противном случае он работать не будет. Попробуйте установить иксы в районе 500, а размеры холста(палитры) оставить прежними.

   
 
 автор: vitali   (14.03.2008 в 13:52)   письмо автору
 
   для: coloboc66   (14.03.2008 в 12:35)
 

Есть такая присказка: ...вылить на голову ушат с водой укрывшись фиговым листком - непромочившись.
Вы хотите своим примером опровергнуть эту истину. Все ваши манипуляции с GD-функциями как и у художника ограничиваются размерами палитры. Увы.

   
 
 автор: coloboc66   (14.03.2008 в 17:15)   письмо автору
 
   для: vitali   (14.03.2008 в 13:52)
 

И всё ж таки выход есть - пересчитать координаты относительно левого верхнего угла холста.

   
 
 автор: mihdan   (14.03.2008 в 17:17)   письмо автору
 
   для: coloboc66   (14.03.2008 в 17:15)
 

Так и нужно вообще-то делать, насколько я понимаю вопрос ))

   
 
 автор: sim5   (14.03.2008 в 17:24)   письмо автору
 
   для: coloboc66   (14.03.2008 в 17:15)
 

СОздайте сперва холст нужного размера, а потом рисуйте на нем все что хотите. Вы же пытаетесь вывести все по отдельности.

   
Rambler's Top100
вверх

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