Image Generator Does Not Work

Asked

Viewed 138 times

0

<pre>
<code>    
<?php
$tamanhofonte = 100;
// Fonte de código de barras que eu tenho em um sistema
$fonte = 'c39hrp48dhtt.ttf';

// Texto que será impresso na imagem
// Para que funcione com leitores é necessário
// que seja iniciado e finalizado a String com o caracter '*'
$texto = "*" . $_GET['nome'] . "*";

// Retorna o tamanho da imagem criada pela fonte acima carregada.
$tamanho = imagettfbbox($tamanhofonte, 0, $fonte, $texto);
$largura = $tamanho[2] + $tamanho[0] + 8;
$altura = abs($tamanho[1]) + abs($tamanho[7]);

// cria a imagem exatamente do tamanho informado pelo imagettfbbox
$imagem = imagecreate($largura, $altura);
/* @Parametros
 * $largura - Largura que deve ser criada a imagem
 * $altura - Altura que deve ser criada a imagem
 */

// Primeira chamada do imagecolorallocate cria a cor de fundo da imagem
imagecolorallocate($imagem, 255, 255, 255);

// As demais chamadas criam cores para serem usadas na imagem
$preto = imagecolorallocate($imagem, 0, 0, 0);

// Adiciona o texto a imagem
imagefttext($imagem, $tamanhofonte, 0, 0, abs($tamanho[5]), $preto, $fonte, $texto);
/* @Parametros
 * $imagem - Imagem previamente criada Usei imagecreate.
             poderia ter usado o imagecreatefromjpeg
 * $tamanhofonte - Tamanho da fonte em pixel
 * 0 - Posição X do texto na imagem
 * 0 - Posição Y do texto na imagem
 * abs($tamanho[5]) - Corrige o Y
 * $preto - Cor do texto
 * $fonte - Caminho relativo ou absoluto da fonte a ser carregada.
 * $texto - Texto que deverá ser escrito
 */

// Header informando que é uma imagem JPEG
header( 'Content-type: image/jpeg' );

// eEnvia a imagem para o borwser ou arquivo
imagejpeg( $imagem, NULL, 80 );
/* @Parametros
 * $imagem - Imagem previamente criada Usei imagecreatefromjpeg
 * NULL - O caminho para salvar o arquivo. 
          Se não definido ou NULL, o stream da imagem será mostrado diretamente. 
 * 80 - Qualidade da compresão da imagem.
 */
?>
</code>

This code was to generate a barcode for Reader but it gives an error like: The image "file" cannot be displayed because contained errors.

Someone could help?

  • There is no error: http://i.imgur.com/Omh5eo1.png, but you must have the c39hrp48dhtt.ttf in the SAME directory of the php file, in this case. That is, teste.php and c39hrp48dhtt.ttf are in the same directory.

  • Look what happened in mine: http://imgur.com/a/2AetS

1 answer

1

There is no error in the code, as I commented above. However I assume, in pure achism, that the problem is because the source file is not in the specified location, when it says that "Barcode source I have in a system" it is unclear if the source is in the said location or if you want to use a source already installed on the device.

If you specify the c39hrp48dhtt.ttf, you must own something like this:

C:.
    c39hrp48dhtt.ttf
    teste.php

Thus the teste.php can read the source you specified in $fonte = 'c39hrp48dhtt.ttf';, because both are in the same directory.

If you want to use an already "installed" source you will need to know where such installation takes place on your operating system, where the source is.

In the case of Windows the location is C:\Windows\Fonts, you can use the %WINDIR%\Fonts, to make it easier.

Soon you can use:

$fonte = getenv('windir').'/Fonts/c39hrp48dhtt.ttf';
// Irá utilizar C:/WINDOWS/Fonts/c39hrp48dhtt.ttf

This way you will consume the source that is already available in your system.

Also remove the <pre> and <code> code, leaving only PHP, after all you are giving in Content-type: image/jpeg.

  • This part of the source I already knew but, I don’t know if this influence but I’m hosting on my Ubuntu.

  • <pre> and <code> were not in the code, a person corrected it. ?

  • I used exactly http://freetexthost.com/0kafgtav45 and it worked normally.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.