Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

André Seiji Goto

texto imagem imagettftext

Recommended Posts

Boa tarde caros colegas.

 

Para falar a verdade não vi se este problema já foi comentado aqui, então, se estiver desculpem.

 

Bom... Estou tendo problema com um código php que faça merge em uma imagem e um texto com a função imagettftext(). Já li descrições do php.net, em sites internacionais, testei códigos, uma porrada de código, e essa coisa não funciona.

 

O código que estou usando (copiado do php.net):

<?php

// Set the content-type

header('Content-Type: image/png');

 

// Create the image

$im = imagecreatetruecolor(400, 30);

 

// Create some colors

$white = imagecolorallocate($im, 255, 255, 255);

$grey = imagecolorallocate($im, 128, 128, 128);

$black = imagecolorallocate($im, 0, 0, 0);

imagefilledrectangle($im, 0, 0, 399, 29, $white);

 

// The text to draw

$text = 'Testing...';

// Replace path by your own font path

$font = 'arial.ttf';

 

// Add some shadow to the text

imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

 

// Add the text

imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

 

// Using imagepng() results in clearer text compared with imagejpeg()

imagepng($im);

imagedestroy($im);

?>

 

Subo o arquivo, mando rodar e a resposta é...

img1.jpg

 

E na configuração do servidor, aparentemente, normal...

img2.jpg

 

Alguém tem alguma ideia do que está havendo de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites
// Replace path by your own font path
$font = 'arial.ttf';

 

Caminho completo da fonte. No Windows o comum é %systemroot%\fonts

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei a fonte na mesma pasta. Tem que estar em outra?

 

Não, apenas tem que estar acessível pelo PHP.

Com outras formas mais simples conseguiu sem problemas??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voltando à questão do caminho da imagem

É necessário o caminho completo. Não basta estar no mesmo diretório. O endereço tem que ser absoluto e não relativo

 

Experimente remover o ".ttf" do final do nome da fonte.

 

A propósito, isso está especificado no manual

 

putenv('GDFONTPATH=' . realpath('.'));
$font = 'Arial'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é só legenda não. É como se fosse essas assinaturas de fórum de jogos. Tem que ser texto personalizado.

 

Eu não tinha visto direito a descrição dos parâmetros, e... Sim, percebi que é o caminho completo e que pode ser tirando o '.ttf'.

 

Porém acabei de testar:

 

  • Caminho completo http
  • Caminho ./pasta/fonte
  • Caminho ../raiz/pasta/fonte

Nada funcionou.

O servidor que estou usando é um servidor externo (USA) onde não sei o path das fontes. Por isso a dúvida. O código está certo? É um problema com o server? Tenho que subir as fontes?

Já não sei mais o que fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim, tem que subir as fontes?? Como você assume que a fonte está no mesmo diretório do script PHP se você não a colocou lá???

 

Como eu já disse, se o servidor for Windows, o caminho padrão é %systemroot%\fonts

 

Em servidores linux - pelo menos os baseados em Debian - os diretórios são todos localizados dentro de /usr/share/fonts

 

Experimente um

var_dump(getenv('GDFONTPATH'));

e veja se há algum output.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema parece ser a biblioteca freeType, a versão não deverá ser a correcta. O servidor onde trabalha tem a biblioteca imagick instalada? Se tiver experimente este código:

 

$img = new Imagick();
$draw = new ImagickDraw();

$img->newImage(200, 50, '#111111'); //define tamanho e cor de fundo da imagem
$draw->setFont('impact.ttf'); //define o tipo de letra
$draw->setFillColor('#ffffff'); //define a cor da letra
$draw->setFontSize(40); //define o tamanha da letra
$img->annotateImage($draw, 20,40,$angle,'TESTE'); //adiciona á imagem o texto
$img->setImageFormat('png');//define o formato
header("Content-Type: image/png"); //define o header

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em nota: eu sei que meu problema é uma coisa simples, mas peço um pouco de paciência para quem está aprendendo php sozinho e está se esforçando ao máximo para entender e resolver o problema.

 

Experimente um

var_dump(getenv('GDFONTPATH'));

e veja se há algum output.

 

Veio o retorno

string(36) "/home/a1645163/public_html/sim/fonts"

 

A pasta onde estão as fontes é essa mesmo, mas o erro continua.

 

O problema parece ser a biblioteca freeType, a versão não deverá ser a correcta.

 

Abri as configurações php do servidor e não há nada escrito sobre.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora poste a saída de

var_dump(touch(getenv('GDFONTPATH') . '/Arial.ttf'));

Substitua Arial pelo nome da fonte desejada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No mesmo script onde você colocou o código do post #9

 

Coloquei assim:

<?php
// Set the content-type
header('Content-Type: image/png');

// Create the image
$im = imagecreatetruecolor(400, 30);

// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);

// The text to draw
$text = 'Testing...';
// Replace path by your own font path
var_dump(getenv('GDFONTPATH'));
var_dump(touch(getenv('GDFONTPATH') . '/arial.ttf'));
$font = "arial.ttf";

// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>

 

Nada mudou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá, até onde temos, você consegue gerar imagens 'SEM' texto normalmente por este processo??

 

Você já tentou com e sem a extensão ao final do nome da fonte, sem sucesso??

 

Você já tentou com outra fonte??

 

Qual a sua versão do PHP?

 

Qual o SO?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá, até onde temos, você consegue gerar imagens 'SEM' texto normalmente por este processo??

Consigo mesclar duas figuras, e até criar imagens/texto sem formatação com o comando imagestring.

 

Você já tentou com e sem a extensão ao final do nome da fonte, sem sucesso??

Você já tentou com outra fonte??

Testei sem a extensão e com a fonte ARABOLIC.TTF.

 

Qual a sua versão do PHP?

Qual o SO?

img2.jpg

 

Sem sucesso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Joga as chamadas de imagettftext e imagepng dentro de var_dump() e veja a saída delas

 

Você precisará de 3 TRUE's.

 

Caso positivo, verifique nos headers do navegador se ele não está tentando processar a saída com um mime-type diferente de imagem.

 

Teste, também, com outros navegadores

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.