Script para criar cantos arredondados em imagens.
Linguagem: PHP
Copyright 2010 Rubens Takiguti Ribeiro
Licença: LGPL 3 ou superior
/** * Cria cantos arredondados em uma foto * @param resource $img Resource de imagem criada pela biblioteca GD * @param int $raio Tamanho do raio da circunferencia * @param string $cor Cor em notacao hexadecimal #HHHHHH ou "transparente" * @return void */ function criar_cantos_arredondados($img, $raio = 10, $cor = 'transparente') { // Checar parametros if (!extension_loaded('gd')) { throw new RuntimeException('Biblioteca GD precisa ser carregada', 1); } if (!is_resource($img)) { throw new InvalidArgumentException('Imagem precisa ser um resouce da GD', 1); } if (!is_numeric($raio)) { throw new InvalidArgumentException('Raio precisa ser numerico', 2); } if (!preg_match('/^#([A-F\d]{2})([A-F\d]{2})([A-F\d]{2})$/i', $cor, $matches) && $cor != 'transparente') { throw new InvalidArgumentException('Cor precisa estar no formato #HHHHHH (H indica hexadecimal) ou valer "transparente"', 3); } // Reservar cor if ($matches) { $cor = array( 'r' => hexdec($matches[1]), 'g' => hexdec($matches[2]), 'b' => hexdec($matches[3]) ); $index_cor = imagecolorallocate($img, $cor['r'], $cor['g'], $cor['b']); } else { imagealphablending($img, false); imagesavealpha($img, true); $index_cor = imagecolorallocatealpha($img, 0xFF, 0xFF, 0xFF, 127); } // Obter tamanho da imagem $w = imagesx($img); $h = imagesy($img); // Caminhar sobre o eixo Y nos diferentes cantos da imagem // e imprimir uma linha que vai da extremidade ate o cosseno do angulo percorrido $passo = 1 / $raio; for ($i = 0; $i <= $raio; $i++) { $seno = $passo * $i; $cosseno = sqrt(1 - pow($seno, 2)); // Canto superior esquerdo $x1 = 0; $y1 = $raio - $i; $x2 = $raio - ($cosseno * $raio); $y2 = $y1; imageline($img, $x1, $y1, $x2, $y2, $index_cor); // Canto superior direito $x1 = $w - $raio + ($cosseno * $raio); $y1 = $raio - $i; $x2 = $w; $y2 = $y1; imageline($img, $x1, $y1, $x2, $y2, $index_cor); // Canto inferior esquerdo $x1 = 0; $y1 = $h - $raio + $i; $x2 = $raio - ($cosseno * $raio); $y2 = $y1; imageline($img, $x1, $y1, $x2, $y2, $index_cor); // Canto inferior direito $x1 = $w - $raio + ($cosseno * $raio); $y1 = $h - $raio + $i; $x2 = $w; $y2 = $y1; imageline($img, $x1, $y1, $x2, $y2, $index_cor); } }
Para usar, é preciso passar um resource de imagem gerado pela extensão GD. Existem várias funções que criam um resource de imagem, veja um exemplo:
// Criando a imagem a partir de um arquivo $img = imagecreatefromjpeg('/caminho/ate/a/imagem.jpg'); // Criando cantos arredondados criar_cantos_arredondados($img);
Depois disso, você pode salvar o conteúdo sobrescrevendo o arquivo original, ou salvá-lo com novo nome, conforme exemplo:
imagejpeg($img, '/caminho/ate/a/imagem.jpg', 100);
Ou pode gerar um arquivo PHP que exibe uma imagem dinamicamente, sem salvá-la com os cantos arredondados:
header('Content-type: image/jpeg'); imagejpeg($img, '', 100); exit(0);
Cor transparente
Existem duas formas de se deixar o fundo do canto arredondado com transparência. Se o formato utilizado aceita nível de transparência, como PNG, você pode passar a string 'transparente' no lugar da cor desejada, conforme exemplo:
$img = imagecreatefrompng('teste.png'); criar_cantos_arredondados($img, 50, 'transparente'); header('Content-Type: image/png'); imagepng($img); exit(0);
Mas se você está trabalhando com um formato que utiliza cores indexadas, como o GIF, então precisa usar uma cor de fundo e, depois, falar que aquela cor deverá ser interpretada como transparente, conforme exemplo:
$img = imagecreatefrompng('teste.gif'); criar_cantos_arredondados($img, 50, '#FF00FF'); // Registrar a cor #FF00FF como sendo transparente imagecolortransparent($img, imagecolorexact($img, 0xFF, 0x00, 0xFF)); header('Content-Type: image/gif'); imagegif($img); exit(0);
2 comentários
Como utilizo esse script
Olá, visitante,
Agora incluí as instruções de uso da função e um exemplo. Espero que isso ajude. Qualquer dúvida é só perguntar.
Postar um comentário
Nota: fique a vontade para expressar o que achou deste artigo ou do blog.
Dica: para acompanhar as respostas, acesse com uma conta do Google e marque a opção "Notifique-me".
Atenção: o blogger não permite inclusão de tags nos comentários, por isso, use algum site externo para postar seu código com dúvidas e deixe o link aqui. Exemplo: pastebin.com