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

Форум PHP

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

 

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

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

тема: круговая диаграмма

Сообщения:  [1-3] 

 
 автор: Panker   (16.07.2006 в 19:24)   письмо автору
 
   для: RV   (16.07.2006 в 16:44)
 

http://www.codenet.ru/webmast/php/gd/AntiAlias.php вот :) нащёл тока не знаю как к диаграме применить ат о не гладкая она блин :)

   
 
 автор: RV   (16.07.2006 в 16:44)   письмо автору
 
   для: Panker   (16.07.2006 в 16:33)
 


<?

// $im - идентификатор изображения 
// $VALUES - массив со значениями 
// $LEGEND - массив с подписями 
function Diagramm($im,$VALUES,$LEGEND) { 
    GLOBAL 
$COLORS,$SHADOWS

    
$black=ImageColorAllocate($im,0,0,0); 

    
// Получим размеры изображения 
    
$W=ImageSX($im);                  
    
$H=ImageSY($im); 

    
// Вывод легенды ##################################### 

    // Посчитаем количество пунктов, от этого зависит высота легенды 
    
$legend_count=count($LEGEND); 

    
// Посчитаем максимальную длину пункта, от этого зависит ширина легенды 
   
$max_length=0
   
// foreach($LEGEND as $v) if ($max_length<strlen($v)) $max_length=strlen($v); 

    // Номер шрифта, котором мы будем выводить легенду 
   
$FONT=2
    
$font_w=ImageFontWidth($FONT); 
    
$font_h=ImageFontHeight($FONT); 

    
// Вывод прямоугольника - границы легенды ---------------------------- 

    
$l_width=($font_w*$max_length)+$font_h+10+5+10
    
$l_height=$font_h*$legend_count+10+10

     
    
// Получим координаты верхнего левого угла прямоугольника - границы легенды 
    
$l_x1=$W-10-$l_width
   
// $l_y1=($H-$l_height)/2; 

    // Выводя прямоугольника - границы легенды 
   // ImageRectangle($im, $l_x1, $l_y1, $l_x1+$l_width, $l_y1+$l_height, $black); 

    // Вывод текст легенды и цветных квадратиков 
   // $text_x=$l_x1+10+5+$font_h; 
   // $square_x=$l_x1+10; 
   /// $y=$l_y1+10; 
/*
    $i=0; 
 foreach($LEGEND as $v) { 
        $dy=$y+($i*$font_h); 
        ImageString($im, $FONT, $text_x, $dy, $v, $black); 
        ImageFilledRectangle($im, 
                             $square_x+1,$dy+1,$square_x+$font_h-1,$dy+$font_h-1, 
                             $COLORS[$i]); 
        ImageRectangle($im, 
                       $square_x+1,$dy+1,$square_x+$font_h-1,$dy+$font_h-1, 
                       $black); 
        $i++; 
        } 
*/
    // Вывод круговой диаграммы ---------------------------------------- 

    
$total=array_sum($VALUES); 
    
$anglesum=$angle=Array(0); 
    
$i=1

    
// Расчет углов 
    
while ($i<count($VALUES)) { 
        
$part=$VALUES[$i-1]/$total
        
$angle[$i]=floor($part*360); 
        
$anglesum[$i]=array_sum($angle); 
        
$i++; 
        } 
    
$anglesum[]=$anglesum[0]; 

    
// Расчет диаметра 
    
$diametr=$l_x1-10-10

    
// Расчет координат центра эллипса 
    
$circle_x=($diametr/2)+10
    
$circle_y=$H/2-10

    
// Поправка диаметра, если эллипс не помещается по высоте 
    
if ($diametr>($H*2)-10-10$diametr=($H*2)-20-20-40

    
// Вывод тени 
    
for ($j=20;$j>0;$j--) 
        for (
$i=0;$i<count($anglesum)-1;$i++) 
            
ImageFilledArc($im,$circle_x,$circle_y+$j
                               
$diametr,$diametr/2
                               
$anglesum[$i],$anglesum[$i+1], 
                               
$SHADOWS[$i],IMG_ARC_PIE); 

    
// Вывод круговой диаграммы 
    
for ($i=0;$i<count($anglesum)-1;$i++) 
        
ImageFilledArc($im,$circle_x,$circle_y
                           
$diametr,$diametr/2
                           
$anglesum[$i],$anglesum[$i+1], 
                           
$COLORS[$i],IMG_ARC_PIE); 
    } 
$an=0
$an1=1
$an2=2
$an3=3
$an4=4
$an5=5
$an6=6
// Зададим значение и подписи 
$VALUES=Array($an,$an1,$an2,$an3,$an4,$an5,$an6); 
$LEGEND=Array("Пон","Вт","Ср","Чет","Пят","Суб","AS"); 

// Создадим изображения 
header("Content-Type: image/png"); 
$im=ImageCreate(300,300);  // размеры

// Зададим цвет фона.  
$bgcolor=ImageColorAllocate($im,255,255,255); 

// Зададим цвета элементов 
$COLORS[0] = imagecolorallocate($im2552033); 
$COLORS[1] = imagecolorallocate($im22010129); 
$COLORS[2] = imagecolorallocate($im1892451); 
$COLORS[3] = imagecolorallocate($im2140127); 
$COLORS[4] = imagecolorallocate($im98196); 
$COLORS[5] = imagecolorallocate($im062136); 
$COLORS[6] = imagecolorallocate($im0102179); 
$COLORS[7] = imagecolorallocate($im0145195); 

// Зададим цвета теней элементов 
$SHADOWS[0] = imagecolorallocate($im2051530); 
$SHADOWS[1] = imagecolorallocate($im170510); 
$SHADOWS[2] = imagecolorallocate($im13901); 
$SHADOWS[3] = imagecolorallocate($im164077); 
$SHADOWS[4] = imagecolorallocate($im48046); 
$SHADOWS[5] = imagecolorallocate($im01286); 
$SHADOWS[6] = imagecolorallocate($im052129); 
$SHADOWS[7] = imagecolorallocate($im095145); 


// Вызов функции рисования диаграммы 
Diagramm($im,$VALUES,$LEGEND); 

// Генерация изображения 
ImagePNG($im
?> 

?> 


попробуй поигратся с размерами диаграммы

   
 
 автор: Panker   (16.07.2006 в 16:33)   письмо автору
 
 

Првиетки )
вот как бы так!
нащёл статью ) сделал диаграму ) но с боку диаграмы выводится 'легенда" типа пояснения! не как не могу её убрать!
и сама диграма оч не чёткая, углы какието тупые что ли, как будто качество изображения плохое!
помогите убрать эти пояснения с боку, и может кто знает можно ли качество ищображеняи лучше сделать )

<?php

// $im - идентификатор изображения
// $VALUES - массив со значениями
// $LEGEND - массив с подписями
function Diagramm($im,$VALUES,$LEGEND) {
    GLOBAL 
$COLORS,$SHADOWS;

    
$black=ImageColorAllocate($im,0,0,0);

    
// Получим размеры изображения
    
$W=ImageSX($im);                 
    
$H=ImageSY($im);

    
// Вывод легенды #####################################

    // Посчитаем количество пунктов, от этого зависит высота легенды
    
$legend_count=count($LEGEND);

    
// Посчитаем максимальную длину пункта, от этого зависит ширина легенды
    
$max_length=0;
    foreach(
$LEGEND as $v) if ($max_length<strlen($v)) $max_length=strlen($v);

    
// Номер шрифта, котором мы будем выводить легенду
    
$FONT=2;
    
$font_w=ImageFontWidth($FONT);
    
$font_h=ImageFontHeight($FONT);

    
// Вывод прямоугольника - границы легенды ----------------------------

    
$l_width=($font_w*$max_length)+$font_h+10+5+10;
    
$l_height=$font_h*$legend_count+10+10;

    
    
// Получим координаты верхнего левого угла прямоугольника - границы легенды
    
$l_x1=$W-10-$l_width;
    
$l_y1=($H-$l_height)/2;

    
// Выводя прямоугольника - границы легенды
    
ImageRectangle($im$l_x1$l_y1$l_x1+$l_width$l_y1+$l_height$black);

    
// Вывод текст легенды и цветных квадратиков
    
$text_x=$l_x1+10+5+$font_h;
    
$square_x=$l_x1+10;
    
$y=$l_y1+10;

    
$i=0;
    foreach(
$LEGEND as $v) {
        
$dy=$y+($i*$font_h);
        
ImageString($im$FONT$text_x$dy$v$black);
        
ImageFilledRectangle($im,
                             
$square_x+1,$dy+1,$square_x+$font_h-1,$dy+$font_h-1,
                             
$COLORS[$i]);
        
ImageRectangle($im,
                       
$square_x+1,$dy+1,$square_x+$font_h-1,$dy+$font_h-1,
                       
$black);
        
$i++;
        }

    
// Вывод круговой диаграммы ----------------------------------------

    
$total=array_sum($VALUES);
    
$anglesum=$angle=Array(0);
    
$i=1;

    
// Расчет углов
    
while ($i<count($VALUES)) {
        
$part=$VALUES[$i-1]/$total;
        
$angle[$i]=floor($part*360);
        
$anglesum[$i]=array_sum($angle);
        
$i++;
        }
    
$anglesum[]=$anglesum[0];

    
// Расчет диаметра
    
$diametr=$l_x1-10-10;

    
// Расчет координат центра эллипса
    
$circle_x=($diametr/2)+10;
    
$circle_y=$H/2-10;

    
// Поправка диаметра, если эллипс не помещается по высоте
    
if ($diametr>($H*2)-10-10$diametr=($H*2)-20-20-40;

    
// Вывод тени
    
for ($j=20;$j>0;$j--)
        for (
$i=0;$i<count($anglesum)-1;$i++)
            
ImageFilledArc($im,$circle_x,$circle_y+$j,
                               
$diametr,$diametr/2,
                               
$anglesum[$i],$anglesum[$i+1],
                               
$SHADOWS[$i],IMG_ARC_PIE);

    
// Вывод круговой диаграммы
    
for ($i=0;$i<count($anglesum)-1;$i++)
        
ImageFilledArc($im,$circle_x,$circle_y,
                           
$diametr,$diametr/2,
                           
$anglesum[$i],$anglesum[$i+1],
                           
$COLORS[$i],IMG_ARC_PIE);
    }
$an=0;
$an1=1;
$an2=2;
$an3=3;
$an4=4;
$an5=5;
$an6=6;
// Зададим значение и подписи
$VALUES=Array($an,$an1,$an2,$an3,$an4,$an5,$an6);
$LEGEND=Array("Пон","Вт","Ср","Чет","Пят","Суб","AS");

// Создадим изображения
header("Content-Type: image/png");
$im=ImageCreate(150,150);

// Зададим цвет фона. 
$bgcolor=ImageColorAllocate($im,255,255,255);

// Зададим цвета элементов
$COLORS[0] = imagecolorallocate($im2552033);
$COLORS[1] = imagecolorallocate($im22010129);
$COLORS[2] = imagecolorallocate($im1892451);
$COLORS[3] = imagecolorallocate($im2140127);
$COLORS[4] = imagecolorallocate($im98196);
$COLORS[5] = imagecolorallocate($im062136);
$COLORS[6] = imagecolorallocate($im0102179);
$COLORS[7] = imagecolorallocate($im0145195);

// Зададим цвета теней элементов
$SHADOWS[0] = imagecolorallocate($im2051530);
$SHADOWS[1] = imagecolorallocate($im170510);
$SHADOWS[2] = imagecolorallocate($im13901);
$SHADOWS[3] = imagecolorallocate($im164077);
$SHADOWS[4] = imagecolorallocate($im48046);
$SHADOWS[5] = imagecolorallocate($im01286);
$SHADOWS[6] = imagecolorallocate($im052129);
$SHADOWS[7] = imagecolorallocate($im095145);


// Вызов функции рисования диаграммы
Diagramm($im,$VALUES,$LEGEND);

// Генерация изображения
ImagePNG($im)
?>

   

Сообщения:  [1-3] 

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

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