Renderizar texto e formas em imagens em PHP

No artigo anterior, focamos em carregar e manipular imagens com PHP. Aprendemos a girar, redimensionar, dimensionar ou inverter uma imagem. Também aprendemos sobre diferentes filtros e a matriz de convolução. Esses tutoriais também abordaram alguns usos práticos da biblioteca GD, como redimensionar todas as imagens em um diretório ou adicionar marcas d’água em várias imagens de uma só vez.

  • PHP

    Manipulando imagens em PHP usando GD

    Monty Shokeen

  • PHP

    Redimensionar e manipular imagens em PHP (com exemplos)

    Monty Shokeen

Além de usar o GD para manipular imagens regulares, também podemos criar nossas próprias do zero. Diferentes funções na biblioteca podem ser usadas para desenhar formas básicas como elipses, círculos, retângulos, polígonos e linhas simples. Com um pouco de matemática, essas formas podem criar bons padrões. Há também funções disponíveis para desenhar texto na imagem renderizada, o que abre muitas possibilidades.

Este tutorial ensinará como desenhar formas básicas em PHP e como renderizar texto usando sua fonte favorita.

Desenhe formas básicas em PHP com GD

Aprenderemos sobre formas básicas nesta seção e, em seguida, abordaremos a espessura da linha, os pincéis e os estilos de linha posteriormente.

Desenhar linhas

Você pode desenhar uma linha reta simples entre dois pontos dados usando o imageline($image, $x1, $y1, $x2, $y2, $color) função. o $image parâmetro é um recurso de imagem que terá sido criado anteriormente usando funções como imagecreatetruecolor() ou imagecreatefromjpeg(). Nós estaremos usando imagecreatetruecolor() ao longo deste tutorial para criar novas imagens do zero. A função desenhará uma linha horizontal se $y1 é igual a $y2. Da mesma forma, ele desenhará uma linha vertical se $x1 é igual a $x2.

Desenhe Círculos e Arcos

A função imagearc($image, $cx, $cy, $width, $height, $start, $end, $color) pode desenhar arcos circulares usando $cx e $cy como seu centro. o $width e $height parâmetros determinam o tamanho do arco em diferentes eixos. o $start e $end parâmetros especificam o ângulo inicial e final do arco em graus. Se você quiser desenhar arcos completos de 0 a 360 graus, você pode usar a alternativa imageellipse($image, $cx, $cy, $width, $height, $color) função.

Desenhar retângulos e polígonos

Você pode desenhar retângulos sobre uma imagem usando o imagerectangle($image, $x1, $y1, $x2, $y2, $color) função. o $x1 e $y1 valores determinam o canto superior esquerdo do retângulo. o $x2 e $y2 valores determinam o canto inferior direito. Há também um imagepolygon($image, $points, $num_points, $color) função, que pode criar um polígono com qualquer número de lados ou pontos. o $points parâmetro é uma matriz onde dois elementos são emparelhados para obter as coordenadas de um ponto específico.

Outra função chamada imageopenpolygon() foi adicionado ao PHP 7, que não traça uma linha entre o primeiro e o último ponto.

Juntando tudo para criar um desenho

No exemplo a seguir, usamos todas essas funções para criar um desenho de linha com uma cabana, o sol e o chão.

O importante aqui é apenas descobrir o valor de diferentes coordenadas. Eu queria desenhar tudo em relação ao tamanho da imagem original, então usei o $img_height e $img_width variáveis ​​para calcular as coordenadas de diferentes pontos.

Desenho de linha em PHP GDDesenho de linha em PHP GDDesenho de linha em PHP GD

Controlando a espessura da linha, o estilo e os preenchimentos de cor

A imagem acima tem alguns problemas, como linhas muito finas e sem coloração. Todos esses problemas podem ser corrigidos facilmente usando funções como imagesetthickness() e imagefilledrectangle().

Espessura da linha

o imagesetthickness($image, $thickness) A função define a espessura das linhas renderizadas ao desenhar retângulos, polígonos, arcos, etc. Por exemplo, definir $thickness a 5 fará qualquer figura desenhada usando imagerectangle(), imagearc(), imagepolygon()etc. 5 pixels de espessura.

Desenhando Formas Preenchidas

Cada função de desenho também tem uma versão de cor preenchida que preenche essa figura específica com uma determinada cor. Por exemplo, imagefilledrectangle() preencherá o retângulo desenhado com a cor dada.

Usando pincéis

Uma função GD muito útil é imagesetbrush($image, $brush). o $brush parâmetro nesta função é apenas mais um recurso de imagem que pode ser usado para desenhar linhas. Por exemplo, você pode usar um desenho vetorial transparente de uma flor como pincel para adicionar belos padrões de flores à sua imagem. O trecho de código abaixo foi escrito para usar a imagem de uma nuvem como pincel ao desenhar um ponto. Isso adiciona uma única nuvem em nosso céu.

Encontrei esta imagem de nuvem no Pixabay e a reduzi para um tamanho apropriado para nosso projeto.

O código completo para a imagem da cabana é dado abaixo. Simplesmente adicionamos duas versões de cada figura, uma para desenhar o contorno e outra para preencher a cor.

Este é o resultado final do código PHP GD acima.

Cor da cabana preenchida com PHP GDCor da cabana preenchida com PHP GDCor da cabana preenchida com PHP GD

Renderizando Texto em Imagens

PHP GD vem com quatro funções diferentes para permitir que você renderize vários caracteres ou apenas um caractere na direção horizontal ou vertical. Essas funções são imagechar(), imagecharup(), imagestring()e imagestringup(). Todos eles aceitam os mesmos seis parâmetros, então vamos discutir apenas os imagechar() função aqui.

o $font parâmetro imagechar($image, $font, $x, $y, $string, $color) função é simplesmente o tamanho do texto renderizado. Aceita apenas valores inteiros de 1 a 5. O $string parâmetro é o texto que você deseja renderizar. Se você passar uma string de vários caracteres para as funções char, apenas o primeiro caractere será renderizado na imagem. o imagecharup() e imagestringup() As funções renderizarão o texto verticalmente de baixo para cima.

Quando se trata de renderização de texto, as quatro funções que discutimos acima são muito limitadas. Você descobrirá que mesmo o maior valor de tamanho de fonte é muito pequeno para uso normal. Além disso, o texto só pode ser escrito na horizontal e na vertical.

Felizmente, o GD também tem um imagettftext($image, $size, $angle, $x, $y, $color, $fontfile, $text) função que pode renderizar o texto em qualquer fonte desejada. o $fontfile O parâmetro é usado para especificar o caminho para a fonte TrueType que você deseja usar para exibir o texto. o $x e $y parâmetros determinam a posição inicial do texto renderizado.

O exemplo a seguir usa todas essas funções para criar alguns efeitos de texto interessantes.

Como você pode ver, renderizamos o mesmo texto com a mesma fonte em posições ligeiramente diferentes para criar alguns efeitos como sombra de texto básico. O importante a ter em mente é que o texto renderizado por qualquer função de texto ocultará completamente o texto abaixo dela em caso de sobreposição. Aqui está a imagem final obtida após a execução do código acima.

Texto PHP GDTexto PHP GDTexto PHP GD

Pensamentos finais

O objetivo deste tutorial foi familiarizá-lo com diferentes funções GD para desenhar formas básicas do zero em PHP. Com a ajuda de um pouco de matemática, você poderá usar essas funções para criar formas mais complicadas, como polígonos regulares, retângulos arredondados, etc.

O PHP GD também tem algumas funções muito úteis para renderizar texto em uma imagem. O uso de uma boa fonte garantirá que o texto renderizado não pareça estranho quando colocado em imagens regulares carregadas de diferentes caminhos de arquivo.

Você criou mais efeitos de texto sofisticados em PHP? Por favor, compartilhe-os conosco nos comentários.

Deixe um comentário

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