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 🙂