Esempio n. 1
0
// cria as linhas horizontais
for ($i = $height - $bottom_height; $i > 0; $i -= $linhas_horizon) {
    imageline($im, 0, $i, $width, $i, $back_line);
}
function drawdot($coords, $tipo, $valor)
{
    global $im, $mapHTML, $inner_text, $linecolor;
    imageline($im, $coords[0], $coords[1], $coords[2], $coords[3], $linecolor[$tipo]);
    imageellipse($im, $coords[0], $coords[1], 3, 3, $linecolor);
    imagestring($im, 1, $coords[0] + 2, $coords[1] + 3, $valor, $inner_text);
}
$legenda_coluna = 0;
for ($i = 0; $i < count($coordenadas); $i++) {
    if ($i && !($i % 3)) {
        $legenda_coluna++;
    }
    $proporcao = ($height - $bottom_height - min($coordenadas[0])) * 0.98 / max($coordenadas[$i]);
    $legenda_height = $height - $bottom_height + $i % 3 * 10;
    imageline($im, $legenda_coluna * 80 + 5, $legenda_height + 5, $legenda_coluna * 80 + 15, $legenda_height + 5, $linecolor[$i]);
    imagestring($im, 1, $legenda_coluna * 80 + 18, $legenda_height, $legenda[$i], $text_color);
    for ($j = 0; $j < count($coordenadas[$i]) - 1; $j++) {
        $x_ini = $x_steps * $j;
        $x_end = $x_steps * ($j + 1);
        $y_ini = $height - $bottom_height - ($coordenadas[$i][$j] - min($coordenadas[$i])) * $proporcao;
        $y_end = $height - $bottom_height - ($coordenadas[$i][$j + 1] - min($coordenadas[$i])) * $proporcao;
        drawdot(array($x_ini, $y_ini, $x_end, $y_end), $i, $coordenadas[$i][$j]);
    }
    drawdot(array($x_end, $y_end, $width - 1, $y_end), $i, $coordenadas[$i][$j]);
}
imagepng($im);
imagedestroy($im);
Esempio n. 2
0
function grafico_linhas($nm_grafico = false, $array_legendas_intervalos = false, $qtd_linhas_horizontais = false, $font_size = 3, $width = 800, $height = 600, $image_name = false)
{
    $coordenadas = array();
    $coordenadas = func_get_arg(7);
    $width = $width;
    $height = $height;
    // Distancias entre a área total da imagem e a área do gráfico
    $deslocamento_graph_up = 50;
    $deslocamento_graph_down = 35;
    $deslocamento_graph_right = 60;
    $deslocamento_graph_left = 20;
    $height_graph = $height - ($deslocamento_graph_down + $deslocamento_graph_up);
    // Tamanho da Fonte
    $fonts = array("1" => 4.77, "2" => 6, "3" => 6.75, "4" => 7.83, "5" => 8.6);
    if ($font_size > 5) {
        $font_size = 5;
    }
    $font_deslocamento = $fonts[$font_size];
    // Define Imagem
    $im = @imagecreate($width, $height) or die("Cannot Initialize new GD image stream");
    $background_color_image = imagecolorallocate($im, 0, 0, 0);
    $text_color = imagecolorallocate($im, 0, 0, 0);
    $back_line = imagecolorallocate($im, 255, 255, 255);
    $inner_text = imagecolorallocate($im, 255, 255, 255);
    $background_color_graph = imagecolorallocate($im, 220, 220, 220);
    $linecolor = array(imagecolorallocate($im, 100, 100, 100), imagecolorallocate($im, 49, 13, 244), imagecolorallocate($im, 220, 0, 0), imagecolorallocate($im, 152, 01, 154), imagecolorallocate($im, 255, 100, 1), imagecolorallocate($im, 200, 151, 10), imagecolorallocate($im, 50, 180, 60), imagecolorallocate($im, 60, 160, 195), imagecolorallocate($im, 123, 00, 15), imagecolorallocate($im, 144, 143, 255), imagecolorallocate($im, 239, 100, 212), imagecolorallocate($im, 39, 95, 35));
    // Desenha Área do Gráfico
    imagefilledpolygon($im, array($deslocamento_graph_right, $deslocamento_graph_up, $deslocamento_graph_right, $height - $deslocamento_graph_down, $width - $deslocamento_graph_left, $height - $deslocamento_graph_down, $width - $deslocamento_graph_left, $deslocamento_graph_up), 4, $background_color_graph);
    // Nome do Gráfico
    $font_size_titulo = 5;
    imagestring($im, $font_size_titulo, ($width - strlen($nm_grafico) * $fonts[5]) / 2, 15, $nm_grafico, $inner_text);
    $espaco_entre_palavras = 5;
    // Desenha Intervalos
    if (count($array_legendas_intervalos) > 0) {
        $posicao_anterior = $deslocamento_graph_right;
        $espaco_intervalo = ($width - $deslocamento_graph_right - $deslocamento_graph_left) / count($array_legendas_intervalos);
        for ($i = 1; $i < count($array_legendas_intervalos); $i++) {
            //die(strlen($array_legendas_intervalos[$i-1]) * $font_deslocamento .">". ($espaco_intervalo-$espaco_entre_palavras));
            if ($espaco_intervalo - $espaco_entre_palavras > 0) {
                while (strlen($array_legendas_intervalos[$i - 1]) * $font_deslocamento > $espaco_intervalo - $espaco_entre_palavras) {
                    $array_legendas_intervalos[$i - 1] = substr($array_legendas_intervalos[$i - 1], 0, strlen($array_legendas_intervalos[$i - 1]) - 1);
                }
            } else {
                $array_legendas_intervalos[$i - 1] = "";
            }
            $diferenca_qtd_letras = strlen($array_legendas_intervalos[$i - 1]);
            imageline($im, $deslocamento_graph_right + $espaco_intervalo * $i, $deslocamento_graph_up, $deslocamento_graph_right + $espaco_intervalo * $i, $height - $deslocamento_graph_down, $back_line);
            imagestring($im, $font_size, $posicao_anterior + ($espaco_intervalo - $diferenca_qtd_letras * $font_deslocamento) / 2, $height - $deslocamento_graph_down + 15, $array_legendas_intervalos[$i - 1], $inner_text);
            $posicao_anterior = $deslocamento_graph_right + $espaco_intervalo * $i;
        }
        // Colocar a ultima legenda de intervalo
        if ($espaco_intervalo - $espaco_entre_palavras > 0) {
            while (strlen($array_legendas_intervalos[$i - 1]) * $font_deslocamento > $espaco_intervalo - $espaco_entre_palavras) {
                $array_legendas_intervalos[$i - 1] = substr($array_legendas_intervalos[$i - 1], 0, strlen($array_legendas_intervalos[$i - 1]) - 1);
            }
        } else {
            $array_legendas_intervalos[$i - 1] = "";
        }
        $diferenca_qtd_letras = strlen($array_legendas_intervalos[$i - 1]);
        imagestring($im, $font_size, $posicao_anterior + ($espaco_intervalo - $diferenca_qtd_letras * $font_deslocamento) / 2, $height - $deslocamento_graph_down + 15, $array_legendas_intervalos[$i - 1], $inner_text);
    }
    reset($coordenadas);
    if (count($coordenadas) > 0) {
        $max_value = current($coordenadas);
        for ($i = 1; $i <= count($coordenadas); $i++) {
            $key = key($coordenadas);
            $max_value = array_merge($max_value, $coordenadas[$key]);
            $prox = next($coordenadas);
        }
        $max_value = max($max_value);
    }
    // Desenha Linhas Horizontais
    if ($qtd_linhas_horizontais) {
        $espaco_intervalo_hor = $height_graph / ($qtd_linhas_horizontais + 1);
        $posicao_anterior = $height - $deslocamento_graph_down;
        $divisao_valores = $max_value / ($qtd_linhas_horizontais + 1);
        $deslocamento_vertical = 5;
        $valor_linha_horizontal = 0;
        imagestring($im, $font_size, $deslocamento_graph_right - 5 - strlen($valor_linha_horizontal) * $font_deslocamento, $posicao_anterior - $deslocamento_vertical, $valor_linha_horizontal, $inner_text);
        for ($i = 0; $i < $qtd_linhas_horizontais; $i++) {
            $valor_linha_horizontal += $divisao_valores * 1.05;
            $valor_linha_horizontal_ant = $valor_linha_horizontal;
            $valor_linha_horizontal_formatado = number_format($valor_linha_horizontal, 1, ".", "");
            imageline($im, $deslocamento_graph_right, $posicao_anterior - $espaco_intervalo_hor, $width - $deslocamento_graph_left, $posicao_anterior - $espaco_intervalo_hor, $back_line);
            imagestring($im, $font_size, $deslocamento_graph_right - 5 - strlen($valor_linha_horizontal_formatado) * $font_deslocamento, $posicao_anterior - $espaco_intervalo_hor - $deslocamento_vertical, $valor_linha_horizontal_formatado, $inner_text);
            $posicao_anterior = $posicao_anterior - $espaco_intervalo_hor;
        }
        $valor_linha_horizontal += $divisao_valores;
        $valor_linha_horizontal_formatado = number_format($valor_linha_horizontal, 1, ".", "");
        imagestring($im, $font_size, $deslocamento_graph_right - 5 - strlen($valor_linha_horizontal_formatado) * $font_deslocamento, $posicao_anterior - $espaco_intervalo_hor - $deslocamento_vertical, $valor_linha_horizontal_formatado, $inner_text);
    }
    // Desenha Linha do Gráfico
    if (count($coordenadas) > 0) {
        $max_value = $max_value * 1.05;
        $cor_linhas = 0;
        foreach ($coordenadas as $i => $array) {
            $posicao_anterior = $deslocamento_graph_right;
            if (count($array) > 1) {
                $cont = 1;
                foreach ($array as $j => $v) {
                    $j = key($array);
                    next($array);
                    $jm = key($array);
                    $x_ini = $posicao_anterior + $espaco_intervalo / 2;
                    $y_ini = $height - $deslocamento_graph_down - $height_graph * $coordenadas[$i][$j] / $max_value;
                    $posicao_anterior = $deslocamento_graph_right + $espaco_intervalo * $cont;
                    if ($jm) {
                        $x_fim = $posicao_anterior + $espaco_intervalo / 2;
                        $y_fim = $height - $deslocamento_graph_down - $height_graph * $coordenadas[$i][$jm] / $max_value;
                    }
                    drawdot(array($x_ini, $y_ini, $x_fim, $y_fim), $cor_linhas, $coordenadas[$i][$j], $im, $linecolor);
                    $cont++;
                }
                //drawdot(array($x_fim,$y_fim,$x_fim,$y_fim),$cor_linhas,$coordenadas[$i][$j], $im, $linecolor);
            } else {
                $x_ini = $posicao_anterior + $espaco_intervalo / 2;
                $y_ini = $height - $deslocamento_graph_down - $height_graph * $coordenadas[$i][0] / $max_value;
                $posicao_anterior = $deslocamento_graph_right + $espaco_intervalo * ($j + 1);
                drawdot(array($x_ini, $y_ini, $x_ini, $y_ini), $cor_linhas, $coordenadas[$i][0], $im, $linecolor);
            }
            $cor_linhas++;
        }
    }
    imagegif($im, "tmp/{$image_name}");
    //imagegif($im,"/tmp/tmp/teste_imagem");
}