Manipulando imagens em PHP usando GD

A internet seria muito chata sem imagens. No entanto, manter e manipular centenas ou milhares de imagens para o seu site pode ser uma dor de cabeça. À medida que o design do seu site muda, pode ser necessário modificar todas as imagens — por exemplo, pode ser necessário converter todas as imagens para escala de cinza ou redimensioná-las para 50% do tamanho original. Você também pode compactar ou cortar imagens diferentes. Fazer isso manualmente é demorado e propenso a erros, mas com um pouco de conhecimento de programação pode ser automatizado.

Neste tutorial, você aprenderá sobre a biblioteca GD (Graphic Draw) em PHP. Você verá como esta biblioteca pode ser usada para manipular imagens redimensionando, cortando, girando ou filtrando-as.

O que é GD?

O PHP pode fazer muito mais do que apenas servir HTML aos visitantes. Por exemplo, tem a capacidade de manipular imagens. Não apenas isso, mas você também pode criar suas próprias imagens do zero e salvá-las ou servi-las aos usuários.

O PHP pode lidar com quase todas as suas necessidades básicas de manipulação de imagens usando a biblioteca GD—abreviação de Graphic Draw.

Configurar

Se estiver trabalhando no Windows, você pode incluir o php_gd2.dll arquivo como uma extensão em php.ini. Se você estiver usando algo como o XAMPP, você encontrará o php_gd2.dll arquivo no diretório xamppphpext. Você também pode verificar se o GD está instalado em seu sistema usando a função phpinfo();. Se você rolar pela saída resultante, encontrará algo semelhante ao seguinte.

PHP XAMPP GDPHP XAMPP GDPHP XAMPP GD

Você também pode visitar as páginas de requisitos e instalação para saber mais sobre o processo de instalação.

Criando imagens usando PHP GD

O primeiro passo para a manipulação de imagens usando PHP é carregá-las na memória como um recurso de imagem. Isso pode ser alcançado usando diferentes funções para diferentes formatos. Todas essas funções têm nomes muito semelhantes, por isso são fáceis de lembrar.

Criar uma nova imagem

o imagecreatetruecolor() A função será útil se você não tiver uma fonte de imagem original que deseja manipular. Ele aceita dois parâmetros inteiros: largura e altura. Ele retornará um recurso de imagem se tudo ocorrer conforme o planejado. O recurso de imagem retornado é basicamente uma imagem preta com largura e altura especificadas.

Carregar um arquivo de imagem

Se você planeja manipular imagens que já estão armazenadas em algum lugar, você se beneficiará do uso de funções como imagecreatefromjpeg(), imagecreatefrompng()e imagecreatefromgif(). Isso criará um recurso de imagem com todos os dados do arquivo de imagem carregado. Essas funções aceitam um único parâmetro que especifica a localização da imagem que você está carregando como URL ou como caminho de arquivo.

Criar uma imagem de uma string

A biblioteca GD também permite criar imagens a partir de uma string usando o imagecreatefromstring() função em PHP. Lembre-se que você terá que usar base64_decode() na string dada antes imagecreatefromstring(). A função pode detectar automaticamente se o tipo de imagem é JPG, PNG, GIF ou outro formato suportado.

Girar, dimensionar, cortar e inverter uma imagem

Algumas operações comuns que você pode querer realizar em um recurso de imagem são rotação, dimensionamento, corte e inversão.

Rotação

Você pode girar uma imagem que já carregou no script usando o imagerotate() função. Ele irá girar a imagem no ângulo fornecido usando o centro da imagem como o centro de rotação. O ângulo é fornecido como um valor flutuante, e o PHP o considera como o valor de grau para rotação.

Às vezes, a imagem girada terá dimensões diferentes em comparação com a versão original. Isso significa que você acabará com uma área descoberta após a rotação. O terceiro parâmetro da imagerotate() A função pode ser usada para especificar a cor de fundo da área vazia após a rotação.

Escala

É muito fácil dimensionar uma imagem usando a biblioteca GD. Você só precisa passar o recurso de imagem, bem como a largura e a altura para o imagescale() função. Se você omitir a altura, o GD dimensionará a imagem para a largura especificada, preservando a proporção.

Você também pode especificar o modo para dimensionar a imagem. Pode ser definido para IMG_NEAREST_NEIGHBOUR, IMG_BILINEAR_FIXED, IMG_BICUBICetc. Uma coisa importante que você precisa lembrar é que esta função retorna uma nova fonte de imagem dimensionada em vez de modificar a original.

Corte

Você pode cortar qualquer recurso de imagem usando o imagecrop() função no GD. O primeiro parâmetro é o recurso de imagem original e o segundo parâmetro é um array associativo com as chaves x, y, widthe heightespecificando a posição e as dimensões da janela de corte.

Cortar e girar imagens usando PHPCortar e girar imagens usando PHPCortar e girar imagens usando PHP

A imagem da borboleta acima foi cortada usando o seguinte código:

Basicamente, armazenamos o comprimento do menor lado no $size variável. Esta variável é então usada para definir o limite do nosso retângulo de corte. Finalmente, a imagem é reduzida de forma que tenha apenas 300 pixels de largura e comprimento. Isso nos dá uma imagem quadrada de tamanho adequado.

Inversão de imagens

As imagens podem ser viradas horizontalmente, verticalmente ou em ambas as direções usando o imageflip() função. Ele aceita o recurso de imagem que você deseja inverter como o primeiro parâmetro e o modo de inversão como o segundo parâmetro. O modo flip pode ser ajustado para IMG_FLIP_HORIZONTAL, IMG_FLIP_VERTICALou IMG_FLIP_BOTH.

Exemplo de inversão de imagensExemplo de inversão de imagensExemplo de inversão de imagens

A imagem superior esquerda na figura acima é a original. A imagem superior direita foi criada usando IMG_FLIP_HORIZONTALa imagem inferior esquerda foi criada usando IMG_FLIP_VERTICALe a imagem inferior direita foi criada usando IMG_FLIP_BOTH. (A imagem do corvo é do Pixabay.)

Aplicando filtros a uma imagem

GD também tem uma ferramenta muito útil imagefilter() função que pode aplicar filtros em diferentes recursos de imagem carregados usando as funções das imagens anteriores. Esta função pode aceitar vários parâmetros dependendo do filtro que você está aplicando.

Para começar, especifique o recurso de imagem e o nome do filtro que deseja aplicar. Você pode configurá-lo para um dos 12 tipos de filtro predefinidos mencionados nos documentos.

  • IMG_FILTER_NEGATE: inverte as cores na imagem
  • IMG_FILTER_GRAYSCALE: remove a cor da imagem
  • IMG_FILTER_BRIGHTNESS: torna a imagem mais clara ou mais escura
  • IMG_FILTER_CONTRAST: aumenta o contraste da imagem
  • IMG_FILTER_COLORIZE: tinge a imagem para uma cor selecionada
  • IMG_FILTER_EDGEDETECT: realça as bordas da imagem
  • IMG_FILTER_EMBOSS: semelhante à detecção de borda, mas dá a cada borda uma aparência elevada
  • IMG_FILTER_GAUSSIAN_BLUR: desfoca a imagem usando o método Gaussiano
  • IMG_FILTER_SELECTIVE_BLUR: desfoca a imagem usando o método seletivo
  • IMG_FILTER_MEAN_REMOVAL: um efeito para criar uma imagem estilizada
  • IMG_FILTER_SMOOTH: suaviza bordas irregulares na imagem
  • IMG_FILTER_PIXELATE: faz a imagem parecer pixelada

Alguns filtros como NEGATE, GRAYSCALE, EDGE_DETECT e EMBOSS não precisa de nenhum dado adicional. Outros filtros, como BRIGHTNESS, CONTRAST e SMOOTH, pode aceitar um parâmetro adicional que especifica a quantidade de brilho, contraste ou suavidade da imagem final. o PIXELATE O parâmetro permite especificar dois parâmetros adicionais: o tamanho do bloco e o modo de pixelização. finalmente, o COLORIZE O filtro aceita quatro parâmetros que determinam os valores dos componentes vermelho, verde e azul, bem como o canal alfa.

Aplicando filtros a uma imagemAplicando filtros a uma imagemAplicando filtros a uma imagem

A imagem no canto superior esquerdo é a original. A imagem superior direita foi criada usando o COLORIZE filtro, o canto inferior esquerdo foi criado usando o GRAYSCALE filtro, e a imagem no canto inferior direito foi criada usando o BRIGHTNESS filtro. (Esta imagem de borboleta foi encontrada no Pixabay.)

Outras funções úteis de manipulação de imagem

Você também deve conhecer algumas outras funções comuns do GD que são úteis de vez em quando.

Obter dimensões da imagem

Você pode determinar a largura e a altura de um recurso de imagem usando o imagesx() e imagesy() funções.

Outra função chamada getimagesize() também pode ser usado para obter a largura e a altura de uma imagem junto com seu tipo. Esta função retorna um array com elementos especificando a largura, altura e formato da imagem. Os dois primeiros elementos do array descrevem a largura e a altura, e o terceiro elemento contém uma constante que especifica o formato do arquivo: um dos IMAGETYPE_PNG, IMAGETYPE_GIFetc

Salvando uma imagem

Depois de fazer todas as alterações desejadas em uma imagem, você provavelmente desejará enviá-la para o navegador ou salvá-la como um arquivo. Em ambos os casos, você terá que usar uma das funções de saída GD como imagejpeg(), imagepng()ou imagegif(). Você passará seu recurso de imagem para uma dessas funções de saída e, se quiser salvar a imagem em um arquivo, também especificará um nome de arquivo. Você também pode controlar a qualidade da imagem de saída usando um terceiro parâmetro opcional, dependendo do tipo de imagem.

Redimensionando todas as imagens em um diretório

Vamos aplicar o conhecimento que adquirimos até agora para fazer algo prático. Nesta seção, redimensionaremos todas as imagens JPEG em um diretório específico para ter uma largura de 640 pixels. A altura será calculada automaticamente com base nas dimensões da imagem original.

Salvaremos as imagens redimensionadas em uma nova pasta intitulada Redimensionado. Todas as imagens originais neste caso têm as mesmas dimensões, mas o código funcionará corretamente com imagens com tamanhos e proporções diferentes.

No código acima, começamos usando o glob() função para encontrar todas as imagens com um .jpg extensão no diretório intitulado Natureza. Os arquivos de imagem são armazenados em uma matriz e fazemos um loop sobre eles um por um.

Como todas as imagens que queremos redimensionar são JPEGs, usamos o imagecreatefromjpeg() função para carregá-los no script. o imagescale() A função é então usada para redimensionar a imagem para uma largura específica—640 pixels em nosso caso. Não especificamos uma altura fixa, então a altura será calculada automaticamente.

Cada um dos arquivos de imagem originais tinha -1920×1080 anexado ao nome do arquivo para indicar suas dimensões. Nós usamos str_replace() no nome do arquivo original e substitua -1920X1080 com o novo tamanho da imagem.

Por fim, salvamos as imagens redimensionadas em uma pasta chamada Redimensionado com os novos nomes de arquivo. Você também pode passar um terceiro parâmetro para o imagejpeg() função para definir a qualidade do arquivo de imagem salvo. Se o terceiro parâmetro for omitido, as imagens serão salvas com qualidade padrão de 75.

Aplicar filtros de escala de cinza e contraste em cada imagem em um diretório

Desta vez, aplicaremos dois filtros diferentes em cada imagem em nosso diretório e salvaremos o resultado final em um diretório diferente sem fazer nenhuma alteração no nome do arquivo. Vamos mergulhar no código e explicarei o que cada função faz mais tarde.

Como você pode ver, carregamos as imagens do Natureza diretório exatamente como fizemos para o exemplo anterior. No entanto, usaremos o imagefilter() desta vez para aplicar filtros no recurso de imagem carregado.

Notar que imagefilter() modifica a imagem original e retorna TRUE ou FALSE com base no sucesso ou fracasso da operação. Isso é diferente do imagescale() função que usamos na seção anterior, que retornou o recurso de imagem em escala.

Outra coisa importante a ter em mente é que o filtro de contraste aceita valores de -100 a 100. Valores negativos implicam mais contraste e valores positivos implicam menos contraste. Isso é o oposto do que algumas pessoas podem esperar! Um valor de 0 deixará a imagem inalterada.

O filtro de brilho, por outro lado, tem limites mínimo e máximo de -255 e 255. O valor negativo neste caso implica em brilho mínimo e o valor positivo implica em brilho máximo.

Obtemos o nome do arquivo do caminho do arquivo usando o basename() função e, em seguida, salve a imagem usando o imagejpeg() função.

Pensamentos finais

O objetivo deste tutorial foi familiarizá-lo com a biblioteca GD em PHP e mostrar como usar todas essas funções para facilitar sua vida. Você pode usar os exemplos no final do tutorial como um guia para escrever seus próprios scripts de manipulação de imagem. Por exemplo, você pode redimensionar uma imagem somente se ela for mais larga que um determinado limite, determinando sua largura usando o imagesx() função.

Todas essas funções abrem muitas possibilidades para facilitar a manipulação de imagens e economizar muito tempo no final. Se você tiver alguma dúvida relacionada a este tutorial, deixe-me saber nos comentários.

Deixe um comentário

O seu endereço de e-mail não será publicado.