Manipulando imagens com WideImage
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 🙂
