PNG transparente com CodeIgniter versão 1.7

17/05/2011

Olá, pessoal

Hoje já estamos na versão 2.0.2 do framework CodeIgniter, mas para quem ainda mantém sistemas nas versões anteriores a 2.0, encontra-se com um problema simples na geração de thumb de imagens PNG com fundo transparente.

Ao tentar gerar um thumb da imagem nas condições citadas, utilizando a biblioteca Image Manipulation Class, temos a desagradável surpresa de obtermos uma imagem com fundo preto. O problema já foi corrigido na verssão 2.0, e pode ser facilmente resolvido nas versões anteriores.

Para isso, abra o arquivo ./system/libraries/Image_lib.php, localiza a linha 515. Você deve encontrar o seguinte código:

515
516
$dst_img = $create($this->width, $this->height);
$copy($dst_img, $src_img, 0, 0, $this->x_axis, $this->y_axis, $this->width, $this->height, $this->orig_width, $this->orig_height);

Então, adicione entre as duas linhas o seguinte código, ficando assim:

515
516
517
518
519
520
521
$dst_img = $create($this->width, $this->height);
if ($this->image_type == 3) // png we can actually preserve transparency
{
        imagealphablending($dst_img, FALSE);
        imagesavealpha($dst_img, TRUE);
}
$copy($dst_img, $src_img, 0, 0, $this->x_axis, $this->y_axis, $this->width, $this->height, $this->orig_width, $this->orig_height);

O código inserido foi extraido justamente da versão atual do sistema. Assim, quando você precisar atualizar o core do framework em sua aplicação, não precisará se preocupar em copiar o hack para o novo arquivo, ok?!

No mais, só sucesso! Abraço e até mais.