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!