Manter a transparência ao redimensionar um PNG no PHP é sempre um problema, este artigo apresenta uma alternativa fácil e simples de como fazer isto. Normalmente o PHP faz com que o fundo transparente fique totalmente preto. É importante citar que este código depende do PHP-GD (Biblioteca PHP que trabalha com imagens)
Em um primeiro momento temos que verificar o tipo mime do arquivo para ter certeza que é uma imagem png
$mime = mime_content_type('myPNG.png') if ( $mime == 'image/png' )
Tendo esta certeza prosseguimos, criamos a imagem png e verificamos se ela é trueColor (24 ou 32bits) ou indexeda (256 cores usando mapa de cores).
$source = imagecreatefrompng('myPNG.png'); $isTrueColor = imageistruecolor($source);
Sendo trueColor seguimos um caminho, criamos a amostra (thumb), incluímos suporte a alpha e definimos para o PHP respeite o alpha da imagem:
if ( $isTrueColor) { $thumb = imagecreatetruecolor( $newWidth, $newHeight ); imagealphablending($thumb, false); imagesavealpha ( $thumb , true ); }
Caso contrário, ou seja sendo indexada:
else { $thumb = imagecreate( $newWidth, $newHeight ); imagealphablending( $thumb, false ); $transparent = imagecolorallocatealpha( $thumb, 0, 0, 0, 127 ); imagefill( $thumb, 0, 0, $transparent ); imagesavealpha( $thumb,true ); imagealphablending( $thumb, true ); }
De posse das imagens criadas, podemos redimensioná-las, com ou sem anti-aliais, ou seja suavização.
if ($antiAlias == false) { imagecopyresized($thumb, $source, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height ); } else { imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height ); }
Definimos o cabeçalho e efetuamos o output da imagem:
header("Content-Type: {$mime'}"); imagepng($thumb);
Este são códigos didáticos, não copie e cole, caso precise de um exemplo de uso real, um código funcional, use o link abaixo.
http://code.google.com/p/php-html-generator/source/browse/trunk/lib/getImage.php
Este exemplo ainda demonstra como redimensionar jpeg e gif, bem como fazer o output da imagem mesmo sem redimensionar.
Bom final de semana a todos.
0sem comentários ainda