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.