* * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo * sob os termos da Licença Pública Geral GNU conforme publicada pela Free * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) * qualquer versão posterior. * * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral * do GNU para mais detalhes. * * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto * com este programa; se não, escreva para a Free Software Foundation, Inc., no * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. * * @author Prefeitura Municipal de Itajaí * @category i-Educar * @license @@license@@ * @package iEd_Include * @since Arquivo disponível desde a versão 1.0.0 * @version $Id$ */ /** * Adiciona zeros a esquerda de um numero * * @param int $num * @param int $digitos * @return string */ function addLeadingZero($num, $digitos = 2) { if (is_numeric($num)) { if ($digitos > 1) { for ($i = 1; $i < $digitos; $i++) { if ($num < pow(10, $i)) { $num = str_repeat('0', $digitos - $i) . $num; break; } } } return $num; } return str_repeat('0', $digitos); } function add2LeadingZero($num) { return addLeadingZero($num, 3); } function calculoIdade($diaNasc, $mesNasc, $anoNasc) { list ($dia,$mes,$ano) = explode('/', date('d/m/Y')); $idade = $ano - $anoNasc; $idade = (($mes<$mesNasc) OR (($mes == $mesNasc) AND ($dia<$diaNasc))) ? --$idade : $idade; return $idade; } function idFederal2int($str) { $id_federal = str_replace(".", "", str_replace("-", "", str_replace("/", "", $str))); return ereg_replace("^0+", "", $id_federal); } function int2CPF($int) { $str = str_repeat('0', 11 - strlen($int)) . $int; return substr($str, 0, 3) . '.' . substr($str, 3, 3). '.' . substr($str, 6, 3) . '-' . substr($str, 9, 2); } function int2CNPJ($int) { if (strlen($int) < 14) { $str = str_repeat('0', 14 - strlen($int)) . $int; } else { $str = $int; } return substr($str, 0, 2) . '.' . substr($str, 2, 3). '.' . substr($str, 5, 3) . '/' . substr( $str, 8, 4 ) . "-" . substr($str, 12, 2); } /** * Formata um valor numérico em uma representação string de CEP. * * @param string|int $int * @return string */ function int2CEP($int) { if ($int) { $int = (string) str_pad($int, 8, '0', STR_PAD_LEFT); return substr($int, 0, 5) . '-' . substr($int, 5, 3); } else { return ''; } } function limpa_acentos( $str_nome ) { $procura1 = array('á', 'é', 'í', 'ó', 'ú', 'à', 'è', 'ì', 'ò', 'ù', 'ä', 'ë', 'ï', 'ö', 'ü', 'ç', 'ã', 'õ', 'ô', 'ê'); $substitui1 = array('a', 'e', 'i', 'o', 'u', 'a', 'e', 'i', 'o', 'u', 'a', 'e', 'i', 'o', 'u', 'c', 'a', 'o', 'o', 'e'); $procura2 = array('Á', 'É', 'Í', 'Ó', 'Ú', 'À', 'È', 'Ì', 'Ò', 'Ù', 'Ä', 'Ë', 'Ï', 'Ö', 'Ü', 'Ç', 'Ã', 'Õ', 'Ê', 'Ô'); $substitui2 = array('A', 'E', 'I', 'O', 'U', 'A', 'E', 'I', 'O', 'U', 'A', 'E', 'I', 'O', 'U', 'C', 'A', 'O', 'E', 'O'); $str_nome = str_replace($procura1, $substitui1, $str_nome); $str_nome = str_replace($procura2, $substitui2, $str_nome); return $str_nome; } function transforma_minusculo($str_nome) { $nome = strtolower($str_nome); $arrayNome = explode(" ", $nome); $nome = ''; foreach ($arrayNome as $parte) { if ($parte != 'de' && $parte != 'da' && $parte != 'dos' && $parte != 'do' && $parte != 'das' && $parte != 'e') { $nome .= strtoupper(substr($parte, 0, 1)) . substr($parte, 1) . ' '; } else { $nome .= $parte . ' '; } } $procura1 = array('Á', 'É', 'Í', 'Ó', 'Ú', 'À', 'È', 'Ì', 'Ò', 'Ù', 'Ä', 'Ë', 'Ï', 'Ö', 'Ü', 'Ç', 'Ã', 'Õ', 'Â', 'Ô'); $substitui1 = array('á', 'é', 'í', 'ó', 'ú', 'à', 'è', 'ì', 'ò', 'ù', 'ä', 'ë', 'ï', 'ö', 'ü', 'ç', 'ã', 'õ', 'â', 'ô'); $nome = str_replace($procura1, $substitui1, $nome); return $nome; } function quebra_linhas_pdf($str_texto, $qtd_letras_linha = 60) { $comp_comp = str_replace("\n", ' ', $str_texto); $tamanho_linha = $qtd_letras_linha; $gruda = ''; $compromisso2 = ''; while (strlen($comp_comp) > $tamanho_linha) { $i = $tamanho_linha; while (substr($comp_comp,$i,1) != ' ' && $i > 0) { $i--; } if ($i == 0) $i=$tamanho_linha; $compromisso2 .= $gruda . substr($comp_comp,0,$i); $comp_comp = substr($comp_comp,$i); $gruda = "\n"; } $compromisso2 .= "$gruda $comp_comp"; $comp_comp = ($compromisso2) ? $compromisso2 : $comp_comp; /** * @todo Realmente precisa desse \n[espaço][espaço]? */ $comp_comp = str_replace("\n ", "\n",$comp_comp); $comp_comp = str_replace("\n ", "\n",$comp_comp); return $comp_comp; } /* * Funcoes foneticas (segundo as mesmas regras das funcoes do banco PG) */ function fonetiza_palavra($palavra) { $i = -1; $fonetizado = ''; /** * @todo Já é a terceira vez que esse tipo de operação é realizada. Precisa * de refactoring. Ver funcoes.inc.php#transforma_minusculo */ // limpa todas as letras acentuadas e passa para minusculas $acentuadasMin = array('á', 'é', 'í', 'ó', 'ú', 'â', 'ê', 'î', 'ô', 'û', 'ä', 'ë', 'ï', 'ö', 'ü', 'à', 'è', 'ì', 'ò', 'ù', 'ã', '?', 'õ', '?', 'ý', 'ÿ', 'ñ', 'ç'); $acentuadasMai = array('Á', 'É', 'Í', 'Ó', 'Ú', 'Â', 'Ê', 'Î', 'Ô', 'Û', 'Ä', 'Ë', 'Ï', 'Ö', 'Ü', 'À', 'È', 'Ì', 'Ò', 'Ù', 'Ã', '?', 'Õ', '?', 'Ý', '?', 'Ñ', 'Ç'); $letras_ok = array('a', 'e', 'i', 'o', 'u', 'a', 'e', 'i', 'o', 'u', 'a', 'e', 'i', 'o', 'u', 'a', 'e', 'i', 'o', 'u', 'a', 'i', 'o', 'u', 'y', 'y', 'n', 'c'); $palavra = str_replace($acentuadasMin, $letras_ok, $palavra); $palavra = str_replace($acentuadasMai, $letras_ok, $palavra); $palavra = strtolower($palavra); // Loop nas letras while ($i++ < strlen($palavra)) { // define as letras $letra_atual = substr($palavra, $i, 1); $letra_prox = substr($palavra, $i + 1, 1); $letra_prox2 = substr($palavra, $i + 2, 1); if ($i) { $letra_ante = substr($palavra, $i, -1); } else { $letra_ante = ''; } // numeros - ok if (is_numeric($letra_atual)) { $fonetizado .= $letra_atual; continue; } // letras iguais - pula if ($letra_atual == $letra_prox) { continue; } // A I ou O - ok if ($letra_atual == 'a' || $letra_atual == 'i' || $letra_atual == 'o') { $fonetizado .= $letra_atual; continue; } // E if ($letra_atual == 'e') { $fonetizado .= 'i'; continue; } // R if ($letra_atual == 'r') { $fonetizado .= 'h'; continue; } // S if ($letra_atual == 's') { if ($letra_prox != 'a' && $letra_prox != 'e' && $letra_prox != 'i' && $letra_prox != 'o' && $letra_prox != 'u' && $letra_prox != 'y' && strlen($fonetizado) == 0) { $fonetizado .= 'is'; continue; } if ($letra_prox == 'c' && $letra_prox2 == 'h') { continue; } if ($letra_prox == 'h') { $fonetizado .= 'ks'; $i++; continue; } $fonetizado .= $letra_atual; continue; } // N if ($letra_atual == 'n') { if ($letra_prox == 'h') { $fonetizado .= 'ni'; continue; } if ($letra_prox != 'a' && $letra_prox != 'e' && $letra_prox != 'i' && $letra_prox != 'o' && $letra_prox != 'u' && $letra_prox != 'y') { $fonetizado .= 'm'; continue; } $fonetizado .= $letra_atual; continue; } // L if ($letra_atual == 'l') { if ($letra_prox == 'h') { $fonetizado .= 'li'; continue; } if ($letra_prox != 'a' && $letra_prox != 'e' && $letra_prox != 'i' && $letra_prox != 'o' && $letra_prox != 'u' && $letra_prox != 'y') { $fonetizado .= 'o'; continue; } $fonetizado .= $letra_atual; } // D if ($letra_atual == 'd') { if ($letra_prox == 'a' || $letra_prox == 'e' || $letra_prox == 'i' || $letra_prox == 'o' || $letra_prox == 'u' || $letra_prox == 'y' || $letra_prox == 'h') { $fonetizado .= 'd'; continue; } $fonetizado .= 'di'; continue; } // C if ($letra_atual == 'c') { if ($letra_prox == 'h' && ( $letra_prox2 == 'a' || $letra_prox2 == 'e' || $letra_prox2 == 'i' || $letra_prox2 == 'o' || $letra_prox2 == 'u' || $letra_prox2 == 'y')) { $fonetizado .= 'ks'; continue; } if ($letra_prox == 'e' || $letra_prox == 'i' || $letra_prox == 'y') { $fonetizado .= 's'; continue; } if ($letra_prox == 'a' || $letra_prox == 'o' || $letra_prox == 'u') { $fonetizado .= 'k'; continue; } } // M if ($letra_atual == 'm') { if ($letra_prox != 'n') { $fonetizado .= $letra_atual; continue; } } // T if ($letra_atual == 't') { if ($letra_prox == 'a' || $letra_prox == 'e' || $letra_prox == 'i' || $letra_prox == 'o' || $letra_prox == 'u' || $letra_prox == 'y' || $letra_prox == 'h') { $fonetizado .= $letra_atual; continue; } $fonetizado .= 'ti'; continue; } // U if ($letra_atual == 'u') { $fonetizado .= 'o'; continue; } // V if ($letra_atual == 'v') { if ($letra_prox == 'a' || $letra_prox == 'e' || $letra_prox == 'i' || $letra_prox == 'o' || $letra_prox == 'u' || $letra_prox == 'y' || $letra_prox == 'h') { $fonetizado .= $letra_atual; continue; } $fonetizado .= 'vi'; continue; } // G if ($letra_atual == 'g') { if ($letra_prox == 'a' || $letra_prox == 'e' || $letra_prox == 'i' || $letra_prox == 'o' || $letra_prox == 'u' || $letra_prox == 'y') { if ($letra_prox == 'u') { if ($letra_prox2 == 'e' || $letra_prox2 == 'i' || $letra_prox2 == 'y') { $fonetizado .= 'j'; $i++; continue; } } $fonetizado .= 'j'; continue; } $fonetizado .= 'ji'; continue; } // B if ($letra_atual == 'b') { if ($letra_prox == 'a' || $letra_prox == 'e' || $letra_prox == 'i' || $letra_prox == 'o' || $letra_prox == 'u' || $letra_prox == 'y' || $letra_prox == 'h') { $fonetizado .= $letra_atual; continue; } $fonetizado .= 'bi'; continue; } // P if ($letra_atual == 'p') { if ($letra_prox == 'a' || $letra_prox == 'e' || $letra_prox == 'i' || $letra_prox == 'o' || $letra_prox == 'u' || $letra_prox == 'y') { $fonetizado .= $letra_atual; continue; } if ($letra_prox == 'h') { $fonetizado .= 'f'; continue; } $fonetizado .= 'f'; continue; } // Z if ($letra_atual == 'z') { $fonetizado .= 's'; continue; } // F if ($letra_atual == 'f') { if ($letra_prox == 'a' || $letra_prox == 'e' || $letra_prox == 'i' || $letra_prox == 'o' || $letra_prox == 'u' || $letra_prox == 'y' || $letra_prox == 'h') { $fonetizado .= $letra_atual; continue; } $fonetizado .= 'fi'; continue; } // J if ($letra_atual == 'j') { $fonetizado .= $letra_atual; continue; } // K if ($letra_atual == 'k') { if ($letra_prox == 'a' || $letra_prox == 'e' || $letra_prox == 'i' || $letra_prox == 'o' || $letra_prox == 'u' || $letra_prox == 'y' || $letra_prox == 'h') { $fonetizado .= $letra_atual; continue; } $fonetizado .= 'ki'; continue; } // Y if ($letra_atual == 'y') { $fonetizado .= 'i'; continue; } // W if ($letra_atual == 'w') { if ($i == 0) { if ($letra_prox == 'a' || $letra_prox == 'e' || $letra_prox == 'i' || $letra_prox == 'o' || $letra_prox == 'u' || $letra_prox == 'y') { $fonetizado .= 'v'; continue; } $fonetizado .= 'vi'; continue; } if ($letra_ante == 'e' || $letra_ante == 'i') { if ($letra_prox == 'a' || $letra_prox == 'e' || $letra_prox == 'i' || $letra_prox == 'o' || $letra_prox == 'u' || $letra_prox == 'y') { $fonetizado .= 'v'; continue; } $fonetizado .= 'o'; continue; } $fonetizado .= 'v'; continue; } // Q if ($letra_atual == 'q') { if ($letra_prox == 'a' || $letra_prox == 'e' || $letra_prox == 'i' || $letra_prox == 'o' || $letra_prox == 'u' || $letra_prox == 'y') { $fonetizado .= 'k'; if ($letra_prox == 'u') { $i++; } continue; } $fonetizado .= 'qi'; continue; } // X if ($letra_atual == 'x') { $fonetizado .= 'ks'; continue; } } return $fonetizado; } /** * retorna 1 se data1 for maior que a data2, * retorna 0 se a data1 for menor que a data2, * retorna 2 se forem iguais. */ function data_maior($data1, $data2) { $data1 = explode('/', $data1); $data2 = explode('/', $data2); if($data1[2] > $data2[2]) { return 1; } elseif($data1[2] < $data2[2]) { return 0; } else { if($data1[1] > $data2[1]) { return 1; } elseif($data1[1] < $data2[1]) { return 0; } else { if($data1[0] > $data2[0]) { return 1; } elseif($data1[0] < $data2[0]) { return 0; } else { return 2; } } } } function minimiza_capitaliza($str) { $nome = strtolower($str); $arrayNome = explode(' ', $nome); $nome =''; $gruda = ''; foreach ($arrayNome as $parte) { if ($parte != 'de' && $parte != 'da' && $parte != 'dos' && $parte != 'do' && $parte != 'das' && $parte != 'e') { $nome .= $gruda . strtoupper(substr($parte,0,1)).substr($parte,1); } else { $nome .= $gruda . $parte; } $gruda = ' '; } /** * @todo Mais um tratamento de acentos, ver funcoes.inc.php#transforma_minusculo(). */ $nome = str_replace(array('Ú','Ô','Ç','Á', 'É', 'Í', 'Ó', 'Ã', 'Ê', 'Ï', 'Ö', 'Ü', 'À', 'È', 'Ì', 'Ò', 'Ù', 'Õ'), array('ú','ô','ç','á', 'é', 'í', 'ó', 'ã', 'ê', 'ï', 'ö', 'ü', 'à', 'è', 'ì', 'ò', 'ù', 'õ'), $nome ); return $nome; } /** * Formata a data para o formato brasileiro * * @param string $data_original data que será transformada * @param bool $h_m determina se o a data retornada incluirá hora e minuto * @param bool $h_m_s determina se o a data retornada incluirá hora, minuto e segundo * * @return string */ function dataToBrasil($data_original, $h_m = FALSE, $h_m_s = FALSE) { if ($data_original) { $arr_data = explode(' ', $data_original); $data = date('d/m/Y', strtotime($arr_data[0])); if ($h_m) { return "{$data} " . substr($arr_data[1], 0, 5); } elseif ($h_m_s) { return "{$data} " . substr($arr_data[1], 0, 8); } return $data; } return FALSE; } /** * Formata a data para o formato do banco * * @param string $data_original data que será transformada * @return string * @todo $data_original = NULL sempre será TRUE. Verificar que código chama * esta função. Lógica falha. */ function dataToBanco($data_original, $inicial = NULL) { if ($data_original) { $data = explode('/', $data_original); if(count($data)) { if (is_null($inicial)) { return "{$data[2]}-{$data[1]}-{$data[0]}"; } if ($inicial == TRUE) { if ($data_original = NULL) { return FALSE; } else { return "{$data[2]}-{$data[1]}-{$data[0]} 00:00:00"; } } elseif($inicial == FALSE) { if ($data_original = NULL) { return false; } else { return "{$data[2]}-{$data[1]}-{$data[0]} 23:59:59"; } } } else { return FALSE; } } return FALSE; } /** * Formata uma data vinda do postgre * * @param string $data_original data que será transformada * @return string */ function dataFromPgToTime($data_original) { if (strlen($data_original) > 16) { $data_original = substr($data_original, 0, 16); } return strtotime($data_original); } /** * Formata uma data ISO-8601 no formato do locale pt_BR. * * O formato ISO-8601 geralmente é utilizado pelos DBMS atuais nos tipos de campos datetime/timestamp. * O PostgreSQL utiliza este padrão. * * @param string $data_original Data que será formatada * @param string $formatacao String de formatação no padrão aceito pela função date() do PHP * @link http://www.php.net/date Documentação da função PHP date() * * @return string */ function dataFromPgToBr($data_original, $formatacao = 'd/m/Y') { return date($formatacao, dataFromPgToTime($data_original)); } /** * Funcao que troca caracteres acentuados por caracteres extendidos de HTML (para compatibilidade de encode). * Ex: á = á * pode substituir na ordem reversa * * @param string $text * @param bool $reverse * @return string * @todo Onde essa função é chamada? Transformação totalmente desnecessária. */ function extendChars($text, $reverse = FALSE) { $chars = array("Ã", "Â", "Á", "À", "Ä", "É", "Ê", "È", "Ë", "Í", "Ì", "Ï", "Î", "Ô", "Õ", "Ó", "Ò", "Ö", "Ú", "Ù", "Û", "Ü", "Ý", "Ñ", "Ç", "ã", "â", "á", "à", "ä", "é", "ê", "è", "ë", "í", "ì", "ï", "î", "ô", "õ", "ó", "ò", "ö", "ú", "ù", "û", "ü", "ý", "ñ", "ç" ); $extends = array("Ã", "Â", "Á", "À", "Ä", "É", "Ê", "È", "Ë", "Í", "Ì", "Ï", "Î", "Ô", "Õ", "Ó", "Ò", "Ö", "Ú", "Ù", "Û", "Ü", "Ý", "Ñ", "Ç", "ã", "â", "á", "à", "ä", "é", "ê", "è", "ë", "í", "ì", "ï", "î", "ô", "õ", "ó", "ò", "ö", "ú", "ù", "û", "ü", "ý", "ñ", "ç" ); if ($reverse) { return str_replace($extends, $chars, $text); } else { return str_replace($chars, $extends, $text); } } /** * Esta função recebe como parâmetros a string que deseja-se quebrar em linhas e o tamanho * de caracteres que a linha vai ter, e ela retorna um array com as linhas. */ function quebra_linhas($string, $tamanho) { $string_atual = $string; $pos = 0; $linhas = array(); while (strlen($string_atual ) > 0) { if ($tam < strlen($string_atual)) { $linhas[$pos] = retorna_linha($string_atual, $tamanho); $string_atual = trim(substr($string_atual, strlen($linhas[$pos]))); } else { $linhas[$pos] = retorna_linha($string_atual, strlen($string_atual)); $string_atual = trim(substr($string_atual, strlen($linhas[$pos]))); } $pos++; } return $linhas; } function retorna_linha($string, $tam) { truncate($string,$tam); } /** * @todo Casting para string ao invés de concatenação ($str = "" . $int . "";) */ function int2IdFederal($int) { $str = "" . $int . ""; if (strlen($str) > 11) { if (strlen($int) < 14) { $str = str_repeat('0', 14 - strlen($int)) . $int; } $str = str_replace('.', '', $str); $str = str_replace('.', '', $str); $str = str_replace('-', '', $str); $str = str_replace('/', '', $str); $temp = substr( $str, 0, 2 ); if (strlen($temp) == 2) { $temp .= '.'; } $temp .= substr($str, 2 ,3); if (strlen($temp) == 6) { $temp .= '.'; } $temp .= substr($str, 5, 3); if (strlen($temp) == 10) { $temp .= '/'; } $temp .= substr( $str, 8, 4 ); if (strlen($temp) == 15) { $temp .= '-'; } $temp .= substr($str, 12, 2); return $temp; } else { if (strlen($int) < 11) { $str = str_repeat('0', 11 - strlen($int)) . $int; } $str = str_replace('.', '', $str); $str = str_replace('.', '', $str); $str = str_replace('/', '', $str); $str = str_replace('-', '', $str); $temp = substr($str, 0, 3); if (strlen($temp) == 3) { $temp .= '.'; } $temp .= substr($str, 3, 3); if (strlen($temp) == 7) { $temp .= '.'; } $temp .= substr($str, 6, 3); if (strlen($temp) == 11) { $temp .= '-'; } $temp .= substr($str, 9, 2); return $temp; } } /** * Verifica se o valor é booleano * aceita como true: * 'true', 't', true, 1, '1', 'yes', 'y', 'sim', 's' * * @param mixed $val * @return bool */ function dbBool($val) { return ($val === 'true' || $val === 't' || $val === TRUE || $val == 1 || $val === 'yes' || $val === 'y' || $val === 'sim' || $val === 's'); } /** * Corta uma string caso ela seja maior do que $size caracteres * Caso $breakWords seja setado como false, quebrará a string no último espaco " " * encontrado antes do caracter $size (desde que o retorno até esse ponto não ande mais caracteres do que 25% de $size) * * @param string $text * @param int $size * @param bool $breakWords * @return string */ function truncate($text, $size = 100, $breakWords = FALSE) { if (strlen($text) > $size) { $text = substr(trim($text), 0, $size); $espaco = strrpos($text, ' '); if ($espaco !== FALSE && !$breakWords && $espaco / $size > 0.75) { $text = substr( $text, 0, $espaco ); } $text .= "..."; } return $text; } /** * capitaliza todos os caracteres de uma string incluíndo os acentuados * ex: série => SÉRIE * @param string $text * @return string */ function str2upper($text) { $ASCII_SPC_MIN = 'àáâãäåæçèéêëìíîïðñòóôõöùúûüýÿ??'; $ASCII_SPC_MAX = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝ???'; return strtr(strtoupper($text), $ASCII_SPC_MIN, $ASCII_SPC_MAX); } /** * @todo */ function girarTextoImagem($texto, $tamanho = 8, $altura = 130) { $largura = $tamanho + 5; $vertical = $altura; $palavras = explode(' ', $texto); for ($i = 0; $i < sizeof($palavras); $i++) { // verifica se a proxima palavra cabe na linha if ($vertical-(strlen($palavras[$i]) * $tamanho) < 0) { $vertical = $altura; $largura += $tamanho; } $vertical -= strlen($palavras[$i]) * $tamanho; } $vertical = $altura; $horizontal = $tamanho; $imagem = imagecreatetruecolor($largura, $altura); $cor = imagecolorallocate($imagem, 0, 0, 0); imagefilledrectangle($imagem, 0, 0, ($largura), ($altura), imagecolorallocate($imagem, 255, 255, 255)); $y_espaco = imagettftext($imagem, $tamanho, 90, $horizontal,$vertical, $cor, 'arquivos/fontes/Vera.ttf', ' '); $y_espaco = $y_espaco[2]; for ($i = 0; $i < sizeof($palavras); $i++) { $y = imagettfbbox($tamanho, 0, 'arquivos/fontes/Vera.ttf', $palavras[$i]); $y = $y[2]; if ($vertical - $y < 0) { $vertical = $altura; $horizontal += $tamanho + 4; } elseif ($i != 0) { } imagettftext($imagem, $tamanho, 90, $horizontal, $vertical, $cor, 'arquivos/fontes/Vera.ttf', $palavras[$i]); $vertical -= ($y + $y_espaco); } $texto = str_replace(' ', '_', limpa_acentos($texto)); imagepng($imagem, "tmp/{$texto}.png"); return "tmp/{$texto}.png"; }