Redimensionando imagens com PHP
gd, imagecopyresampled, imagecreatefromjpeg, ImageCreateTrueColor, imagejpeg, imagens, imagesX, imagesY, PHP, redimensionar imagens, Web
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:
1 | apt-get install php5-gd |
Veremos então um exemplo de como utilizar o PHP para redimensionar uma imagem:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $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 10 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:
1 | http://www.botecodigital.info/exemplos/redimensionar-imagem/imagem.php?size=500 |
Também podemos utilizá-lo em uma tag img:
1 | <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!

Atualmente existe 3 comentários
Usei o codigo mas esta dando erro:
PHP Warning: Cannot modify header information – headers already sent by (output started at E:\home\aipend\Web\detalhe_aunicio.php:144) in E:\home\aipend\Web\detalhe_aunicio.php on line 159
usei o ob_start(); e ob_end_flush(); mas ainda sim nao funcionou. pode me ajudar
Este erro ocorre normalmente quando existe alguma saída como o echo antes de modificar o header, tente colocar o header como primeira instrução.
Muito obrigado pela ajuda! Continue assim, isso é muito lindo!