// 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);
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"); }