Boa tarde, pessoal!
É muito comum em aplicações web a necessidade de trabalhar com imagens, tanto para redimensionamento, criação de thumbnails, girar, etc.
Apresento a Asido, um conjunto de classes para trabalhar com imagens em PHP. Embora eu não goste muito da forma de organização de OO que a Asido utiliza, é uma boa ferramenta e suporta algumas bibliotecas de imagens (chamadas de drivers) como:
- GD2 – Muito conhecida e muito utilizada em PHP
- MagickWand – Uma extensão nativa de PHP para trabalhar com a ImageMagick
- Imagick extension – Idem item anterior, porém é um pouco mais antiga
- Imagick shell – Para trabalhos com a CLI do PHP
Primeiramente faça o download da Asido e coloque em algum local em sua aplicação para que possamos incluir os arquivos.
Detalhe importante: Quando começar a gerar imagens com a Asido utilizando GD vai notar que a qualidade é péssima. Somente edite a linha 184 do arquivo class.driver.gd.php
deixando da seguinte maneira:
<?php $r = imageCopyResampled( // antes era imageCopyResized
Isso vai mudar drasticamente a qualidade das imagens. Por default a Asido gera JPG com qualidade 80. Se quiser mudar vá até a linha 17 do mesmo arquivo class.driver.gd.php e altere para o número que desejar.
<?php // ... define('ASIDO_GD_JPEG_QUALITY', 80); // ... ?>
Continuando…
A Asido possui diversas funcionalidades que podem ser úteis no dia-a-dia de um desenvolvedor. Além de simples, em poucas linhas de código redimensiona-se uma imagem, rotaciona, etc. Vou destacar as principais funcionalidades (que mais uso) da Asido:
Watermark
Cria uma marca d’água sobre imagens. Você informa a imagem da marca dágua que deseja inserir, a imagem de destino e a Asido faz o resto pra você.
<?php require_once "asido/class.asido.php"; asido::driver('gd'); // vamos usar a GD $image = asido::image( 'imagem_de_origem.jpg', 'imagem_de_destino.png' ); asido::watermark($image, 'marca_dagua.png'); // sobrescreve caso exista o arquivo de destino $image->save(ASIDO_OVERWRITE_ENABLED); ?>
Resize
Redimensiona uma imagem (criação de thumbnails). Você informa também imagens de origem e destino, as dimensões que quer (pode ser largura e altura, somente altura e somente largura, bem prático) e pronto.
<?php require_once "asido/class.asido.php"; asido::driver('gd'); // vamos usar a GD $image = asido::image( 'imagem_de_origem.jpg', 'imagem_de_destino.png' ); // redimensiona para uma imagem 400x400px proporcionalmente asido::resize($image, 400, 400, ASIDO_RESIZE_PROPORTIONAL); // sobrescreve caso exista o arquivo de destino $image->save(ASIDO_OVERWRITE_ENABLED); ?>
Somente informando a largura que deseja e ele calcula a altura proporcionalmente:
<?php // ... asido::resize($image, 400, 0, ASIDO_RESIZE_PROPORTIONAL); // largura 400px // ou asido::resize($image, 0, 400, ASIDO_RESIZE_PROPORTIONAL); // altura 400px // ... ?>
Fit
Permite você redimensionar uma imagem para “caber” em um espaço pre-determinado por você (largura X altura px), ou seja, se a imagem for menor, ele não redimensiona, caso seja maior, ele vai achar o tamanho mínimo ideal para que sua imagem caiba dentro do espaço que você quer.
<?php // ... asido::fit($image, 500, 500); // ... ?>
Convert
Converte imagens em outros formatos de arquivo. Tipo JPG para GIF e por ai vai. Suporta JPG, GIF e PNG.
Rotate
Permite rotacionar uma imagem, em qualquer ângulo que desejar.
<?php asido::rotate($image, 90); asido::rotate($image, 180); asido::rotate($image, 270);
Além do mais, você pode escolher um ângulo bem bizarro e preencher o fundo com uma cor, visto que a imagem vai ficar bem estranha né?
<?php // rotacionar 30 graus asido::rotate($image, 30, asido::color(39, 107, 20));
Rotação com preenchimento por cor utilizando Asido
- Flip e Flop: Cria uma imagem espelhada verticalmente e horizontalmente, respectivamente.
- Crop: “Corta” um pedaço da imagem que desejar, passando as coordenadas x, y.
- Grayscale: Transforma a imagem em uma imagem preto-e-branco, ou melhor, em escala de cinza.
Para maiores detalhes leia a documentação da Asido ou dê uma olhada rápida em alguns exemplos para facilitar.