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

Форум PHP

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

 

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

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

тема: Рисование средствами рнр
 
 автор: Владимир55   (28.09.2007 в 14:11)   письмо автору
 
 

Есть информация типа:

мужчины - 120
женщины - 170
дети -16

Пока что я вывожу её в табличном виде. Это тоже приемлемо, но вот если бы вывести ее в виде цветной гистограммы, это было бы вообще великолепно!

Есть ли в рнр подходящий инструмент?

Как вообще решаются подобные проблемы?

   
 
 автор: fiper   (28.09.2007 в 14:13)   письмо автору
 
   для: Владимир55   (28.09.2007 в 14:11)
 

http://ru2.php.net/manual/ru/function.imagecreate.php

   
 
 автор: Владимир55   (28.09.2007 в 14:24)   письмо автору
 
   для: fiper   (28.09.2007 в 14:13)
 

РНР могуч!

А не могли бы Вы для примера создать рисунок (гистограмму) из приведенных мною параметров? Буквально три прямоугольничка заданного размера и разного цвета, стоящие рядом. Чтобы понять, как все же это делается.

   
 
 автор: Владимир55   (28.09.2007 в 14:41)   письмо автору
 
   для: Владимир55   (28.09.2007 в 14:24)
 

Или попроще пример.

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

И можно ли задать цвет?

   
 
 автор: Valick   (28.09.2007 в 15:07)   письмо автору
 
   для: Владимир55   (28.09.2007 в 14:41)
 

А посмотрите вот это.

   
 
 автор: cheops   (30.09.2007 в 02:27)   письмо автору
 
   для: Владимир55   (28.09.2007 в 14:24)
 

Вы можете отталкиваться от следующего скрипта
<?php
  $rows 
= array(12017016);

  
// Ширина изображения
  
$width 200;
  
// Высота изображения
  
$height 200;
  
// Ширина одного столбца
  
$row_width 30;
  
// Ширина интервала между столбцами
  
$row_interval 5;

  
// Создание пустое изображение
  
$img imagecreatetruecolor($width$height);

  
// Заливаем изображение белым цветом
  
$white imagecolorallocate($img255255255); 
  
imagefill($img00$white);


  for(
$i 0$y1 $height$x1 0$i count($rows); $i++)
  {
    
// Формируем случайный цвет для каждого из столбца
    
$color imagecolorallocate($img
                    
rand(0255), rand(0255), rand(0255)); 

    
// Нормирование высоты столбца
    
$y2 $y1 $rows[$i]*$height/200;
    
// Определение второй координаты столбца
    
$x2 $x1 $row_width;

    
// Отрисовываем столбец
    
imagefilledrectangle($img$x1$y1$x2$y2$color);

    
// Между столбцами создаём интервал в $row_interval пикселей
    
$x1 $x2 $row_interval;
  }

  
// Выводим изображение в браузер, в формате GIF
  
header ("Content-type: image/gif");     
  
imagegif($img);
?>

   
 
 автор: sim5   (30.09.2007 в 13:54)   письмо автору
 
   для: cheops   (30.09.2007 в 02:27)
 

Ну тогда уж так:

<?php
function Segment($x,$y,$rad,$in,$end,$color) {
  global 
$im,$x,$y,$black;
  
imagefilledarc($im$x$y$rad*2$rad*2$in$end$colorIMG_ARC_PIE);
  
imagefilledarc($im$x$y$rad*2$rad*2$in$end$blackIMG_ARC_EDGED IMG_ARC_NOFILL);
}

function 
Diagram($data,$colors,$x,$y,$rad) {
  global 
$im,$x,$y,$black;
  
$cnt=count($data);
  
sum=array_sum($data);
  
$in=0;
  
$end=floor($in+(($data[1]*100)/$sum)*360/100);
  
Segment($x,$y,$rad,$in,$end,$colors[1]);
  for(
$i=2;$i<$cnt;$i++) {
    
$in=$end;
    
$end=floor($in+(($data[$i]*100)/$sum)*360/100);
    
Segment($x,$y,$rad,$in,$end,$colors[$i]);
  }
  
$in=$end;
  
$end=360;
  
Segment($x,$y,$rad,$in,$end,$colors[$cnt]);
}

$men 120//мужчины
$wmen 170//женщины
$chil 16//дети
$size 200//размер изображения

$im ImageCreate ($size$size);
$red ImageColorAllocate($im25500);
$blue ImageColorAllocate($im00255);
$green ImageColorAllocate($im02550);
$white ImageColorAllocate($im255255255);
$black ImageColorAllocate($im000);
ImageFill($im00$white);
$x=$size/2-1$y=$x;
$rad=$size/2;
$data[1]=$men$colors[1]=$blue;
$data[2]=$wmen$colors[2]=$red;
$data[3]=$chil$colors[3]=$green;
//вывод круговой диаграммы
Diagram($data,$colors,$x,$y,$rad);
header ("Content-type: image/gif");
Imagegif($im);
imagedestroy($im);
?>

   
 
 автор: cheops   (30.09.2007 в 14:29)   письмо автору
 
   для: sim5   (30.09.2007 в 13:54)
 

Parse error: syntax error, unexpected '=' in d:\main\get.php on line 11

   
 
 автор: sim5   (30.09.2007 в 14:33)   письмо автору
 
   для: cheops   (30.09.2007 в 14:29)
 

Ну забыл про бакс! ))


$sum=array_sum($data);

   
 
 автор: cheops   (30.09.2007 в 14:36)   письмо автору
 
   для: sim5   (30.09.2007 в 13:54)
 

Хм... собственно помоему требовалась именно гистограмма, а не круговая диаграмма, однако для малого количества категорий она действительно удобнее.

   
 
 автор: Владимир55   (30.09.2007 в 21:02)   письмо автору
 
   для: cheops   (30.09.2007 в 14:36)
 

Ёлки-палки, здорово-то как!

Спасибочки!

   
 
 автор: Владимир55   (01.10.2007 в 01:44)   письмо автору
 
   для: Владимир55   (30.09.2007 в 21:02)
 

Здорово-то оказалось только не бумаге... А в реале ничего не показывается - чистый экран. С Денвером пишет тарабарские знаки, а с хостингом просто вообще ничего. Хоть первый вариант, хоть второй - одинаково.

Может, этот код для рнр 5 версии?
Или какая настройка нужна?

   
 
 автор: sim5   (01.10.2007 в 01:58)   письмо автору
 
   для: Владимир55   (01.10.2007 в 01:44)
 

Для работы этого скрипта (хоть первый, хоть второй) нужно чтобы была установлена библиотека php_gd2.dll. На хосте она обычно поддерживается по умолчанию, в Денвере также установлена, если конечно у вас не нечто особенное в конфигурациях Денвера.
С хоста вызывайте так, например, имя скрипта выводящего диаграмму будет diagramm.php, тогда на странице вставляйте изображение:
<img src="path/diagramm.php" />

   
 
 автор: Владимир55   (02.10.2007 в 01:21)   письмо автору
 
   для: sim5   (01.10.2007 в 01:58)
 

Денвер самый обычный. На сервере результат тот же. А именно:

Сделал специальный тестовый test.htm файл, разместив в нем единственную строку:

<p>Диаграмма  <img src="diagramm.php" /></p>


И сделал рнр файл с названием diagramm.php, разместив в нем первый, а затем вместо первого второй коды.
Оба файла в корне сайта. На файле test.htm пустой квадратик - и больше ничего при любом варианте кодов.

Что бы это значило?

   
 
 автор: sim5   (02.10.2007 в 01:46)   письмо автору
 
   для: Владимир55   (02.10.2007 в 01:21)
 

Скорее всего не обрабатываются заголовки, я так пологаю. Вот пример запроса вашего, с реального сайта:

<p>Диаграмма <img src="diagramm.php" /></p>

   
 
 автор: Владимир55   (02.10.2007 в 01:58)   письмо автору
 
   для: sim5   (02.10.2007 в 01:46)
 

Что-то можно сделать, чтобы коды функционировали?

Или уже считать, что "фокус не удался"?

   
 
 автор: kasmanaft   (02.10.2007 в 05:58)   письмо автору
 
   для: Владимир55   (02.10.2007 в 01:58)
 

Это, наверное, из-за imagegif(). В последних GD ее вроде бы нет.
Попробуйте imagepng() или imagejpeg().

Ну и соответственно изменить заголовок content-type.

PS кстати, content-type можно послать "text/plain" и посмотреть ошибки, которые выведутся (обратившись прямо к diagramm.php)

   
 
 автор: sim5   (02.10.2007 в 11:15)   письмо автору
 
   для: Владимир55   (02.10.2007 в 01:58)
 

Не должно быть, чтобы при наличии GD не было поддержки GIF. У меня GD версии 2.1.9, все на месте. Но попробуйте сохранить и передать его как JPEG изображение. Также можно проверить поддержку вашей GD-библиотекой, получив массив функцией gd_info().
Можно вообще без GD-графики, подготовив три изображения с локальным цветом:
если график горизонтальный, то фиксированной заданной высоты и шириной 1рх;
если график вертикальный, то фиксированной заданной ширины и выстой 1рх.
(собственно изображения могут быть однопиксельными).
Далее узнаете сумму всего контингента посетителей, если процент нужен от общей суммы, либо берете от наибольшего числа, а остальное процент от него. Тогда, при горизонтальном графике, выводите:

<img src="path/name.ext" height="фиксированный размер по высоте в пикселях"
width="процент от большего размера в пикселях" />

Вот и получится график, а далее "легенда" и прочие "украшательства".

   
 
 автор: cheops   (01.10.2007 в 09:20)   письмо автору
 
   для: Владимир55   (01.10.2007 в 01:44)
 

Скрипт не модифицировали? Берёте как есть?

   
 
 автор: Valick   (01.10.2007 в 10:18)   письмо автору
 
   для: Владимир55   (01.10.2007 в 01:44)
 

Вы по ссылке ходили которую я указал?
Там ваша проблема решается вообще без GD библиотеки... присмотрелись бы

   
Rambler's Top100
вверх

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