Fala fala minha gente! Tudo na mais devida paz?

A classe WideImage te ajuda manipular imagens salvas no seu site de forma extemamente fácil e intuitiva, com ela você pode:
- Redimensionar imagens;
- Cropar (cortar) imagens;
- Inserir marca d’agua na imagem;
- Mesclar imagens;
- Converter a imagem em escalas de cinza;
- E muito mais…
Atenção: A classe WideImage tem alguns pré-requisitos:
- PHP 5.2 ou superior (pode funcionar em versões anteriores, mas sem direito a suporte)
- Extensão GD2 do PHP
- Memória o suficiente para carregar as imagens
Carregando Imagens para a Memória
Quando você for usar a classe para manipular uma imagem você precisa, claro, carregar a imagem antes… Existem duas formas de fazer isso:
2 | $img = WideImage::load('imagens/minha_foto.jpg'); |
2 | $img = WideImage::loadFromFile('imagens/minha_foto.jpg'); |
Feito isso você carregou a imagem para e memória do PHP.
Redimensionando Imagens
Depois de carregada uma imagem pode ser redimensionada… Existem três tipos de redimensionamento:
- inside – A imagem será redimensionada para caber dentro da largura e altura especificada, não distorce a imagem (tipo padrão)
- outside – A imagem será redimensionada para preencher a largura e altura especificada, não distorce a imagem
- fill – A imagem será redimensionada para preencher por completo a largura e altura especificada, distorce a imagem se necessário
2 | $img = $img->resize(200, 200, 'inside'); |
Isso fará com que a imagem seja redimensionada para caber dentro de um quadrado de 200×200 píxels… A imagem final poderá ter 200×200, 100×200 ou 200×100 pois todos esses tamanhos estão menores ou iguais a 200×200 píxels.
2 | $img = $img->resize(350, 200, 'outside'); |
Isso fará com que a imagem seja redimensionada para preencher um quadrado de 350×200 píxels… Se as proporcões da imagem forem maiores que essa proporção de 350×200 a imagem final será maior que o 350×200.
Suponhamos que imagem fosse um quadrado de 500×500, depois de redimensionada ela terá 350×350, pois ela está preenchendo o quadrado de 350×200 mas precisa manter a sua proporção original de 1:1… Se o tipo de redimensionamento fosse “fill” a imagem final teria sempre 350×200, mesmo que ela fosse menor antes, pois o fill distorce a imagem quando necessário.
Existe ainda um quarto parâmetro que é a “direção” do redimensionamento, os seus valores possíveis são:
- any – A imagem será redimensionada sempre, seja ela maior ou menor que as dimensões de destino (direção padrão)
- down – A imagem será redimensionada apenas quando ela for maior que as dimensões de destino
- up – A imagem será redimensionada apenas quando ela for meno que as dimensões de destino
Cropando (cortando) Imagens
Você também pode cortar uma imagem carregada… O crop() é um dos métodos mais interessantes da WideImage, e usá-lo em conjunto com o método resize() é devastador…
O crop() tem quatro parâmetros: coorenada X onde o corte irá começar, coordenada Yonde o corte irá começar, largura do corte e altura do corte.
Vamos a alguns exemplos de crop:
2 | $img = $img->crop(0, 0, 150, 150); |
Mas ninguém quer cortar um pedaço do canto superior direito da imagem… Geralmente precisamos fazer um corte no meio da imagem… É aí que o crop() mostra seu poder:
2 | $img = $img->crop('50% - 50', '50% - 40', 100, 80); |
Veja que interessante: nos dois primeiros parâmetros usamos um posicionamento diferente… dizemos que o crop irá para a metade da imagem (50%) e voltará 50px para lagura e 40px para a altura e depois irá fazer um corte de 100×80… Genial não é? Isso fará um corte de 100×80 no meio da imagem.
E se a imagem for muito grande? Você pode acabar pegando um pedaço da imagem que não serve de nada… É aí que você aprende a usar o resize() em conjunto com o crop():
2 | $img = $img->resize(100, 80, 'outside'); |
4 | $img = $img->crop('50% - 50', '50% - 40', 100, 80); |
Se você gostar, também pode fazer tudo de uma vez, o que é bem mais interessante:
2 | $img = $img->resize(100, 80, 'outside')->crop('50% - 50', '50% - 40', 100, 80); |
Salvando Imagens
Você já carregou sua imagem, redimensionou e cropou ela.. Agora só falta tirar ela da memória e salvar ela em um arquivo, substituindo (ou não) o anterior… E é assim que você faz isso:
2 | $img->saveToFile('/imagens/minha_foto_menor.jpg'); |
Quando a imagem for salva em JPG você também pode definir a qualidade da imagem, diminuindo assim o tamanho do arquivo:
2 | $img->saveToFile('/imagens/minha_foto_menor.jpg', null, 80); |
Enviando Imagens para o Navegador
Você também pode enviar imagens diretamente para o navegador, isso funciona bem quando você quer manipular uma imagem e exibí-la sem precisar salvá-la em um arquivo novo… É só tirar ela da memória e jogar para o navegador, assim:
2 | header("Content-type: image/jpeg"); |
5 | $img->asString('jpg', 80); |
Outros Exemplos
Veja aqui um exemplo onde carregamos uma imagem do HD, redimensionamos, cropamos e salvamos no mesmo local, substituindo a anterior:
01 | $arquivo = '/imagens/fotos/tiutalk.jpg'; |
04 | $img = WideImage::load($arquivo); |
07 | $img = $img->resize(100, 100, 'outside'); |
10 | $img = $img->crop('50% - 50', '50% - 50', 100, 100); |
13 | $img->saveToFile($arquivo); |
E veja uma versão onde fazemos isso tudo numa linha:
1 | $arquivo = '/imagens/fotos/tiutalk.jpg'; |
3 | WideImage::load($arquivo)->resize(100, 100, 'outside')->crop('50% - 50','50% - 50', 100, 100)->saveToFile($arquivo)->destroy(); |
E aí? Gostaram?

Artigo originalmente publicado por
Thiago Belem:
Manipulando imagens no PHP