No post Redimensionando imagens com PHP mostrei como redimensionar uma imagem utilizando a biblioteca GD calculando a altura proporcional, esta semana tive que redimensionar uma imagem para caber em uma div de largura e altura fixa. Confesso que estava passando trabalho até que achei a classe WideImage que além de redimensionar fornece várias funcionalidades como marca d’água e recorte.

Para começar baixe a classe em WideImage, ela irá estar na pasta lib, eu costumo renomear esta pasta para wideimage e copiá-la para o diretório que irei utilizá-la.

Redimensionando Imagem

Vamos então ao exemplo de redimensionamento e mostrar a nova imagem no navegador:

require( "wideimage/WideImage.php");
 
$image = WideImage::load("img/imagem1.png");
 
$nova_img = $image->resize(400, 300);
 
$nova_img->output('jpg', 90);

Imagem Original | Exemplo resize

Na linha 1 carregamos o arquivo da classe.

Na linha 3 lemos a imagem, aqui esta uma das coisas legais desta classe que ela aceita não somente ler um imagem armazenada no servidor como também aceita uma a partir de uma URL como http://wwww.botecodigital.dev.br/imagem/logo.png, ou também vindo de um formulário com o método $img = WideImage::loadFromUpload('mynameimg'); . A Classe WideImage suporta os seguintes formatos: GIF, PNG, JPG, GD, GD2, WBMP, XBM, XPM.

Na linha 5 redimensionamos a imagem para caber em 400x300, e geramos uma nova imagem armazenada na variável $nova_imagem.

O método resize pode aceitar um terceiro parâmetro, o padrão é inside que faz com que a imagem fique com no máximo(no nosso exemplo) 500 de largura e 400 de altura, mantendo a proporção. Com o valor outside ela será maior que 500x400, mantendo a proporção. Com o valor fill irá redimensionar para o tamanho fornecido sem se importar em manter a proporção.

Na linha 7 pegamos a nova imagem redimensionada e exibimos no navegador no formato jpg, com a qualidade de 90.

Também podemos salvar a imagem em disco com o método $img->saveToFile('imagem.jpg', 90);, lembrando que devemos ter permissão de escrita no diretório em que queremos salvar.

Marca D’agua(watermark)

A classe WideImage também permite inserir uma imagem dentro de outra, fazendo o efeito de marca D’Água. Vejamos o exemplo:

require( "wideimage/WideImage.php");
 
$image = WideImage::load("img/imagem1.png");
$marca = WideImage::load("img/marca-boteco.png");
 
$nova_img = $image->merge($marca,'right','bottom');
 
$nova_img->output('jpg', 90);

Imagem Original| Exemplo Merge

Na linha 1 como vimos carregamos a classe, na linha 3 carregamos a imagem e na linha 4 carregamos a imagem da marca.

Na linha 6 chamamos o método merge da imagem principal e passamos por parâmetro a imagem de marca. Os dois seguinte parâmetro seguinte informam a posição(x e y respectivamente) em que a marca irá ser inserida, eles aceitam tanto valores em pixels como as posições left, right, top e bottom. Também é possível fazer uma combinação dos valores left, right, top e bottom com pixels, como por exemplo right-50 que posicionaria a marca 50px do canto direito da imagem, ou bottom-20 que posicionaria a marca 20px da parte inferior da imagem.

No método merge também é possível passar um quarto parâmetro que seria o alpha.

Recortando (crop)

Vamos ver um exemplo de recorte de uma imagem:

require( "wideimage/WideImage.php");
 
$image = WideImage::load("img/imagem1.png");
 
$nova_img = $image->crop(250,250,400,400);
 
$nova_img->output('jpg', 90);

Imagem Original | Exemplo Crop

Na linha 5 é chamado o método crop que aceita 4 parâmetros, os dois primeiros são os pontos x e y a partir de onde a imagem será recortada, e o terceiro e o quarto parâmetro são respectivamente a largura e altura da imagem, ou seja, a imagem gerada pelo exemplo acima terá o tamanho de 400x400, que seria a área do ponto 250x250 até o ponto 750x750 da imagem original.

Como no método merge o método crop também aceita como valores left, right, top e bottom.

Bom esse é o básico da classe WideImage ela possui vários outros recurso que vale a pena da uma olhada.

Até mais e obrigado pelos peixes 🙂