Instalação
Artigos
Cursos
Loja
INSTALAÇÃO
ARTIGOS
CURSOS
EBOOKS
DOWNLOADS
LOJA
ARTIGOS
Manipulando imagens com biblioteca Intervention
A biblioteca mais fácil de manipular imagens em PHP
# Manipulando imagens com biblioteca Intervention Image [Intervention Image](http://image.intervention.io/) é uma biblioteca de manipulação de imagens `PHP` de código aberto. Ela fornece uma maneira fácil de criar, editar e compor imagens, atualmente ela suporta as duas bibliotecas de processamento de imagem mais comuns: - GD Library - Imagick. A biblioteca tem o objetivo de tornar a manipulação de imagens do PHP mais fácil e com varias funcionalidades. Não importa se você deseja criar miniaturas de imagens, marcas d'água ou manipular grandes arquivos de imagem. Intervention Image ajuda você a gerenciar todas as tarefas de maneira fácil com o menor número de linhas de código possível. A biblioteca segue o padrão da FIG PSR-2 para garantir um alto nível de interoperabilidade entre o código `PHP` compartilhado e é totalmente testado em unidade.
# Instalação O Intervention Imagem tem os seguintes requisitos de sistema para funcionar corretamente: - PHP na versão 5.4 ou superior - Extensão Fileinfo - Composer E uma das seguintes bibliotecas: - GD ou - Imagick PHP extension Além é claro de um servidor web que pode ser: - Apache2 - Nginx - Lighttpd Usando um servidor Linux os comandos de instalação são os seguintes: ```r $ sudo apt-get install apache2 $ sudo apt-get install php $ sudo apt-get install composer ``` No windows é comum o uso de serviços que disponibilizam apache e php juntos como o WampServer e nele é possível adicionar novas extensões. O composer pode ser baixado direto pelo site oficial onde um instalador é disponibilizado. **Qual biblioteca usar GD ou Imagick?** Embora o Intervention Image funcione normalmente com ambas bibliotecas elas não suportam o mesmo número de formatos de imagem, sendo a `Imagick` a mais completa das duas . Biblioteca |JPEG|PNG|GIF|TIF|BMP|ICO|PSD|WebP ---------- |:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--: GD |✔️|✔️|✔️|-|-|-|-|✔️* Imagick |✔️| ✔️|✔️|✔️|✔️|✔️|✔️|✔️* > *Para suporte a WebP, o driver GD deve ser usado com o PHP 5>= 5.5.0 ou PHP 7 . Se o Imagick for usado, ele deve ser compilado com o libwebp para suporte ao WebP. ```r $ sudo apt-get install php-gd ``` ou ```r $ sudo apt-get install php-imagick ``` Reinicie o servidor web ```r $ sudo service apache2 restart ``` Este tutorial irá usar a biblioteca `php-imagick` por ser mais completa. Após instalar todos os requerimentos certifique-se que a biblioteca para processamento de imagens está ligada. Isso pode ser feito criando um arquivo com a função `phpinfo()`. ```php 'imagick')); ``` O Intervention Image oferece 51 métodos diferentes para manipulação de imagem, portanto não tenha medo de experimentar alguns deles. A lista completa de métodos: - backup() - blur() - brightness() - cache() - canvas() - circle() - colorize() - contrast() - crop() - destroy() - ellipse() - encode() - exif() - filesize() - fill() - filter() - flip() - fit() - gamma() - getCore() - greyscale() - height() - heighten() - insert() - interlace() - invert() - iptc() - limitColors() - line() - make() - mask() - mime() - opacity() - orientate() - pickColor() - pixel() - pixelate() - polygon() - rectangle() - reset() - resize() - resizeCanvas() - response() - rotate() - save() - sharpen() - stream() - text() - trim() - widen() - width()
# Principais métodos do Intervention Image É possível usar o Intervention Image de duas maneiras: - tradicional - estática As duas maneiras tem os mesmos resultados, veja a diferença de uso delas: ### Tradicional: ```php // incluindo o autoload de classes require 'vendor/autoload.php'; // importando a classe Manager do Intervention Image use Intervention\Image\ImageManager; // instanciando um gerenciador de imagem com a "engine" escolhida $manager = new ImageManager(array('driver' => 'imagick')); // to finally create image instances $image = $manager->make('public/foo.jpg')->resize(300, 200); ``` ### Estática: ```php // incluindo o autoload de classes require 'vendor/autoload.php'; // importando a classe Manager do Intervention Image use Intervention\Image\ImageManagerStatic as Image; // instanciando um gerenciador de imagem com a "engine" escolhida Image::configure(array('driver' => 'imagick')); // and you are ready to go ... $image = Image::make('public/foo.jpg')->resize(300, 200); ``` Os exemplos abaixo usarão métodos estáticos. ## Salvar a imagem Mesmo sendo a última função a ser usada, é importante saber de antemão como salvar uma imagem depois de ser processada. `save([string $path, [int $quality]])` ### Parâmetros - **path (opcional)** Local onde o arquivo deve ser salvo, se a imagem for criada a partir de outra existente e o caminho não for definido, o método tentará sobrescrever a imagem existente. - **quality (opicional)** Defina opcionalmente a qualidade da imagem. É normalizado para todos os tipos de arquivo para um intervalo de 0 (má qualidade, arquivo pequeno) a 100 (melhor qualidade, arquivo grande). A qualidade só é aplicada se você estiver codificando o formato JPG, já que a compactação PNG é sem perdas e não afeta a qualidade da imagem. O valor padrão é 90. ### Exemplo ```php 'imagick')); // Abre e redimensiona uma imagem $img = Image::make('people.jpg')->resize(300, 200); // Salva a imagem como jpg com qualidade média $img->save('media.jpg', 60); // Salva a imagem como jpg com qualidade padrão $img->save('padrao.jpg'); // Salva a imagem no formato png $img->save('png.png'); ``` > Imagem original (92,2 kB) ![Imagem original](resources/posts/intervention/images/people.jpg) > media.jpg (15.2 kB) ![Imagem qualidae média](resources/posts/intervention/images/media.jpg) > padrao.jpg (31.3 kB) ![Imagem qualidade padrão](resources/posts/intervention/images/padrao.jpg) >png.png (119.6 kB) ![Imagem formato png](resources/posts/intervention/images/png.png) ### Como salvar em outros formatos? Como visto no exemplo acima, basta definir o formato do arquivo no momento de salvar que ele será convertido automaticamente. Se for escolhida uma extensão não suportada, a biblioteca tentará primeiro usar o tipo MIME da imagem para definir a codificação. Se isso também falhar, a imagem será codificada como JPEG. ## Redimensionar imagem `resize($width, $height, [$callback])`: Redimensiona a imagem atual com base na largura e / ou altura especificada. ### Parâmetros - **width** a nova largura da imagem - **height** a nova altura da imagem - **callback (optional)** com a callback é possível manter a proporção da imagem ou evitar um aumento de tamanho indesejado. ### Exemplos: ```php 'imagick')); // Redimensiona a imagem para um tamanho fixo $img = Image::make('people.jpg'); // Cria a instância da imagem $img->resize(300, 200); $img->save('1.jpg'); // Redimensiona apenas a largura da imagem $img = Image::make('people.jpg'); // Cria a instância da imagem $img->resize(600, null); $img->save('2.jpg'); // Redimensiona apenas a altura da imagem $img = Image::make('people.jpg'); // Cria a instância da imagem $img->resize(null, 200); $img->save('3.jpg'); ``` > Imagem original: ![Imagem original](resources/posts/intervention/images/people.jpg) > 1.jpg ![enter image description here](resources/posts/intervention/images/1.jpg) >2.jpg ![enter image description here](resources/posts/intervention/images/2.jpg) >3.jpg ![enter image description here](resources/posts/intervention/images/3.jpg) **Como usar a função callback para manter a proporção da imagem?** Usando a função callback, invocaremos a função `aspectRation()` e `upsize()` para manter a propoção da imagem e evitar amplia-lá. ```php 'imagick')); // Redimensiona a largura da imagem mantendo a proporção (altura automática) $img = Image::make('people.jpg'); // Cria a instância da imagem $img->resize(480, null, function ($constraint) { $constraint->aspectRatio(); }); $img->save('4.jpg'); // Redimensiona a altura da imagem mantendo a proporção (largura automática) $img = Image::make('people.jpg'); // Cria a instância da imagem $img->resize(null, 320, function ($constraint) { $constraint->aspectRatio(); }); $img->save('5.jpg'); // Evitando possível ampliação da imagem $img = Image::make('people.jpg'); // Cria a instância da imagem $img->resize(null, 1200, function ($constraint) { $constraint->aspectRatio(); $constraint->upsize(); }); $img->save('6.jpg'); ``` > 4.jpg ![enter image description here](resources/posts/intervention/images/4.jpg) > 5.jpg ![enter image description here](resources/posts/intervention/images/5.jpg) > 6.jpg ![enter image description here](resources/posts/intervention/images/6.jpg) ## Como adicionar marca d'água ```php insert(mixed $source, [string $position, [integer $x, integer $y]]) ``` Cole uma determinada imagem sobre a atual, podendo definir uma posição opcional e uma coordenada de deslocamento. Esse método pode ser usado para aplicar outra imagem como marca d'água, porque os valores de transparência são mantidos. ### Parâmetros - **source** A imagem que será inserida no topo da imagem atual. - **position (opicional)** A posição onde a imagem será inserida. O valores possíveis são: - top-left (default) - top - top-right - left - center - right - bottom-left - bottom - bottom-righ - **x (opicional)** Deslocamento relativo opcional da nova imagem no eixo x da imagem atual. O deslocamento será calculado em relação ao parâmetro de posição. Padrão: 0. - **y (opicional)** Deslocamento relativo opcional da nova imagem no eixo y da imagem atual. O deslocamento será calculado em relação ao parâmetro de posição. Padrão: 0. ### Exemplo Como adicionar uma marca d'água em uma imagem. ```php 'imagick')); // Abre uma imagem $img = Image::make('people.jpg'); // Adiciona uma marca dagua (imagem com tranparência) $img->insert('marca.png'); //Salva a imagem $img->save('imagem_marca.png'); ``` > Imagem original ![Imagem original](resources/posts/intervention/images/people.jpg) > Marca d'água ![Marca d'água here](resources/posts/intervention/images/marca.png) > Resultado final > ![Imagem marca](resources/posts/intervention/images/imagem_marca.png)
COMENTE SOBRE