Adicionando texto em imagens em tempo real

Com o uso de PHP e a biblioteca GD, a manipulação de imagens, editando e inclusive inserindo textos antes de apresetar a imagem ao usuário se torna uma tarefa simples. Como estes dias tive de recorrer a este recurso para gerar cupons “on the fly” no site ComuniWEB, decidi escrever um artigo mostrando como isso é possível e apresentando a simplicidade da tarefa.

Primeiros passos

Atenção: Verifique se a biblioteca GD esta instalada no phpinfo(); Existem algumas formas de exibir o resultado de uma operação como esta, por exemplo:

  • salvar o arquivo em disco
  • apresentar na tela (como imagem, dentro do HTML)
  • apresentar na tela (somente imagem)

Neste exemplo vamos apresentar o arquivo como uma imagem, embutida no HTML como qualquer outra, para isso precisamos entender a seguinte estrutura. Geralmente uma tag do tipo “” aponta para um arquivo “.jpg” ou “.gif”, mas neste caso iremos apontar ela para um arquivo “.php” que irá retornar os dados como se fosse uma imagem sendo lida.

Com isso vamos ter a seguinte estrutura, dois arquivos, um chamado main.php e um chamado imagem.php. O arquivo main.php irá apresentar o HTML e mostrar a imagem, o arquivo imagem.php será o real responsável por buscar uma imagem e inserir texto nela, neste caso criamos mais um arquivo img.jpg para servir de exemplo.

main.php

Este arquivo é bem simples e direto, HTML com uma imagem, apenas um detalhe importante, no nome da imagem vamos passar um valor por GET com o texto que será escrito na imagem: ```html Veja abaixo seu certificado

AO`$*q`riup`Imirpmaihggcmpeoe=mmi.erIpçomhaappg*aae*sCmsráoegaiétceacF,arroermseJtgPeaErGa(ra"qeuixim-vaiogmegdm.ejvepemg"ru)em;curpeecruarrsoadiomaPgHePm,obraisgiicnaamle,ntetceaxrtroegeanrviaadiomaegefmaznearmaemjóurniçaã.oPdaorsadiosisso,enPtHãPo,pososuuiexdpilviecrasrasfpurnoçcõeesssodeppaesnsdoenadopadsosof.ormatodaimagem,[ImageCreateFromJPEG](http://br2.php.net/manual/pt_BR/function.imagecreatefromjpeg.php),[imageCreateFromGIF](http://br2.php.net/manual/pt_BR/function.imagecreatefromgif.php),etc...

Agora para a escrita temos que preparar alguns dados para a escrita. Existem duas formas de escrever em uma imagem, caracter por caracter ou uma string completa (imagechar ou imagestring). Neste caso vamos usar a função para strings, mas ambas recebem os mesmo valores, variando apenas o texto a ser escrito. Antes de chamar a função devemos ter pronto a cor com o qual será escrito o texto.

ara isso devemos usar a função imagecolorallocate que recebe como valores o ponteiro da imagem e a cor, em três parametros separados no formato RGB. Neste caso usamos preto:

$cor = imagecolorallocate($rImg, 0, 0, 0);

Agora sim podemos efetuar a escrita. A função imagestring recebe estes parametros, nesta ordem:

  • imagem: o ponteiro da imagem
  • font: um valor inteiro, de 1 a 5 (fonte padrão, quanto maior o número, maior a fonte) ou uma fonte de sistema
  • x: deslocamento horizontal (coordenada)
  • y: deslocamento vertical (coordenada)
  • string: texto que será escrito
  • color: variável com a cor definida anteriormente

Vale lembrar que x e y estão em relação ao topo esquerdo da imagem. Em relação a fonte, neste exemplo iremos utilizar a fonte padrão do PHP, mas geralmente é possivel utilizar qualquer fonte tty, vou descrever um pouco mais no final do artigo.

Esta é nossa imagem de base:

Vou escrever meu nome no local reservado, com isso levando em conta a posição (remova 2 a 3 pixels do topo de overhead da fonte), e o fato de que devo decodificar o texto com urldecode, o resultado final da função é este:

imagestring($rImg,5,126,22,urldecode($\_GET\['nome'\]),$cor);

Antes de finalizar o arquivo devemos definir o header indicando que estamos echoando uma imagem do tipo JPG e após isso podemos usar a função imageJPEG que intrui o PHP a jogar o código da imagem para a tela, existe a opção de passar um segundo parametro que indica o nome do arquivo que deve ser gerado.

header('Content-type: image/jpeg'); imagejpeg($rImg);

Este é o resultado final:

E este o código completo: ```php < ?php

//Carregar imagem $rImg = ImageCreateFromJPEG(“ex-img.jpg”);

//Definir cor $cor = imagecolorallocate($rImg, 0, 0, 0);

//Escrever nome imagestring($rImg,5,126,22,urldecode($_GET[’nome’]),$cor);

//Header e output header(‘Content-type: image/jpeg’); imagejpeg($rImg,NULL,100);

?>

T`$*e`fUm`otopnishtlpia=zao'npadororitafulon.nittdteafsd'e;pediremsaougnteaitlltiifzztaaedrxatsf(*o$*nitme,s2p0e,rs0o,na1l1i,za2d1a,s,$gArreiya,l,$fVoenrtd,an$at,exotu);funçõesmaisexóticascomoFuturaououtrasquenãoestãogeralmentelocalizadasemqualquersistema.ParautilizarfontesTrueType,podemosutilizarafunção[imagettftext](http://br2.php.net/manual/pt_BR/function.imagettftext.php),quenospermiteapontarparaarquivo.ttfdafontequedeveráserusada,comodemostradoabaixo:
comments powered by Disqus

Related Posts

OpenAds vira OpenX e fala português

OpenAds vira OpenX e fala português

  • February 22, 2008

OpenXEm mais uma reviravolta, a plataforma que começou sua vida como phpAds (1998), virou phpAdsNew, progrediu para OpenAds (passando pelo fork MaxMediaManager) finalmente se formalizou em uma grande plataforma chamada OpenX.

Read More
Review: A Arte das Comunidades Virtuais - Jono Bacon

Review: A Arte das Comunidades Virtuais - Jono Bacon

  • July 5, 2010

capa

Devo confessar que Jono Bacon me pegou de surpresa, ao acompanhar o processo de criação do livro jamais imaginei que teria em mãos um material tão útil para quem lida com comunidades virtuais no dia a dia. Jono é figurinha marcada dentro deste mundo, com vasta experiência em gerenciar e participar de comunidades virtuais, o que faz dele realmente um excelente candidato a escrever um livro como este.

Read More
php|tek 2009: The community in action

php|tek 2009: The community in action

  • June 1, 2009

This year I was abel to attended the 2009 php|tek conference in Chicago. This conference is hosted by MTACon, the company behind php|architect magazine, one of the most influent PHP publications in the world. php|tek is a unique event in its overall “feel” and purpose - for those that read my post on ZendCon'08 you may be able to pickup this difference yourselves. Tek is a community oriented event, as opposed to ZendCon which is much more aimed at companies. Is this good you ask? Yes, its perfect, it in no way falls short of the content in ZendCon, but on the plus side it gives one many more opportunities to mingle and meet the central PHP Core Developer Team, and most importantly, it inspires attendees to work with and give back to PHP.

Read More