Boteco Digital

Redimensionando imagens com PHP

Muitas vezes, quando estamos criando um sistema web, necessitamos enviar alguma imagem para o servidor e é só falar a palavra redimensionar que o usuário faz cara feia. Então a responsabilidade fica para o desenvolvedor que deve redimensionar a imagem enviada e armazená-la ou exibi-la.

Antes de começarmos a ver código temos que nos certificar de que a biblioteca GD esteja instalada pois a manipulação de imagens no PHP é feita através das funções desta biblioteca. Por padrão ela já vem instalada no PHP5. No Debian ela pode ser instalada facilmente utilizando o comando:

apt-get install php5-gd

Veremos então um exemplo de como utilizar o PHP para redimensionar uma imagem:

$imagemjpg = "castelo.jpg";
$largura_alvo = $_GET['size'];

$img = imagecreatefromjpeg($imagemjpg);

$largura_original = imagesX($img);
$altura_original = imagesY($img);

$altura_nova = (int) ($altura_original * $largura_alvo)/$largura_original;

$nova = ImageCreateTrueColor($largura_alvo,$altura_nova);
imagecopyresampled($nova, $img, 0, 0, 0, 0, $largura_alvo, $altura_nova, $largura_original,  $altura_original);

header("Content-type: image/jpg");
imagejpeg($nova);

Na linha 1 definimos a imagem, detalhe poderíamos ter recebido ela por parâmetro GET como recebemos o novo tamanho da imagem na linha 2, este valor(size) será a nova largura da imagem e deve ser passado ao chamar o script de redimensionamento.

Na linha 4 criamos uma nova imagem via PHP a partir do arquivo fornecido na linha 1 utilizando a função imagecreatefromjpeg (para criar uma imagem a partir de outros arquivos utilizamos as funções imagecreatefrompng, imagecreatefromgif).

Na linha 6 e 7 pegamos a largura e altura da imagem utilizando as funções imagesX() e imagesX() que retornam respectivamente a largura(eixo x) e altura(eixo y) da imagem passada como parâmetro.

Na linha 9 é onde calculamos a nova altura da imagem, como queremos que nossa imagem tenha uma largura especifica também temos que alterar a altura para a imagem não ficar desproporcional. O cálculo é feito através de uma regra de três simples.

Na linha 11 criamos uma nova imagem em branco com as novas dimensões utilizando a função ImageCreateTrueColor.

Na linha 12 copiamos a imagem antiga(criada na linha 4) para a nova (criada na linha 11) utilizando a função imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )

Agora já temos a nossa imagem redimensionada armazenada em $nova então precisamos mostrá-la na tela, para isso utilizaremos a função imagejpeg que envia para o browser a imagem armazenada no parâmetro passado.

Em vez de mostrarmos a imagem no browser podemos salvá-la no servidor utilizando a mesma função, bastando informa como segundo parêmetro o local para ser armazenado.

imagejpeg($nova,'/home/boteco/imagens/imagemredimensionada.jpg');

Um detalhe na linha 14 mudamos nosso Content-type para image/jpg para que possamos visualizá-la no browser diretamente pelo link:

  http://www.botecodigital.info/exemplos/redimensionar-imagem/imagem.php?size=500

Também podemos utilizá-lo em uma tag img:

    <img src="http://www.botecodigital.info/exemplos/redimensionar-imagem/imagem.php?size=500" alt="imagem redimensionada" />

A manipulação de imagens no PHP é bem vasta, utilizando as mesmas funções você pode criar vários outros efeitos como marca d’agua, captcha entre outros.

Bom era isso espero que tenham gostado! Paz e prosperidade!

Categorias PHP
comments powered by Disqus