Ir para o conteúdo
ou

Software livre Brasil

 Voltar a Porão do Tri...
Tela cheia

Redimensionando imagens png mantendo transparência no PHP

17 de Setembro de 2010, 0:00 , por Software Livre Brasil - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 1445 vezes

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.


Fonte: http://trialforce.nostaljia.eng.br/?p=477

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.