Imagem gerada pelo PHP GD A imagem não pode ser exibida porque contém erros no Firefox

Imagem gerada pelo PHP GD A imagem não pode ser exibida porque contém erros no Firefox [Português]

Ao gerar uma imagem com PHP, por exemplo, adicionando uma marca d'água a uma imagem armazenada no servidor, usando código abaixo ou semelhante a JPEG em vez de PNG, a imagem pode não ser gerada e gerar um erro, visível diretamente no Firefox, mas não no Chrome.

Esse tipo de código, apesar de funcionar em alguns servidores, agora pode funcionar em outras, por algumas razões obscuras. No meu caso, funcionou perfeitamente bem localmente, mas produziu erro abaixo no servidor da Internet, a imagem não pode ser exibida porque contém erros.

A questão pode vir de várias razões, aqui estão algumas delas:

Uma saída já foi definida anteriormente.

Um erro genuíno da geração de imagens.

O tipo de imagem errado é usado.

A biblioteca de imagens não está instalada.

$stamp = imagecreatefrompng('watermark.png');
if(!$im = imagecreatefrompng('image.png')) die('Error generating image');
$marge_right = $marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

$copyimage = imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

header('Content-type: image/png');
if(!imagepng($im)) die('Error generating image');
if(!imagedestroy($im)) die('Error generating image');
if(!imagedestroy($stamp)) die('Error generating image');

Uma saída já foi definida anteriormente

Mesmo que não seja intencionalmente, pode ser o caso, por exemplo, de outros scripts anteriores conterem espaços no final - para evitar esse erro, certifique-se, como o PHP recomenda, de não fechar os scripts com a tag de fim do PHP?

Em seguida, antes de usar a função de cabeçalho, use o código a seguir para garantir que qualquer cabeçalho definido anteriormente seja descartado

foreach (getallheaders() as $name => $value) {
header_remove($name);
}

E também esta função para garantir que nenhuma saída tenha sido gerada antes do cabeçalho e da imagem

ob_end_clean();

Isso resolveu o problema no meu caso, e a imagem foi exibida corretamente novamente.

Um erro genuíno da geração de imagens

Caso um erro real seja lançado durante a geração da imagem, certifique-se de que o PHP esteja configurado para exibir todos os tipos possíveis de erros e verifique os logs correspondentes para poder rastreá-lo e resolvê-lo.

O código a seguir fará com que o PHP relate todos os erros no log:

error_reporting(E_ALL);
ini_set('display_errors', '1');

Você pode então descobrir que alguns erros foram relatados, mesmo que eles não apareçam no html de saída, devido à configuração do servidor.

O tipo de imagem errado é usado

Certifique-se de que os tipos de imagem que você está usando estão corretos, por exemplo, usando este código para distinguir entre png e jpeg.

Verifique também se o cabeçalho está correto de acordo com a saída usada, dependendo da função de geração de imagem usada

//to generate png image
header('Content-type: image/png');
if(!imagepng($im)) die('Error generating image');
//to generate jpeg image
header('Content-type: image/jpeg');
if(!imagejpeg($im)) die('Error generating image');

A biblioteca de imagens não está instalada

Para garantir que as bibliotecas de imagens estejam instaladas. Para fazer isso, execute a função phpinfo (); em um script e verifique a saída para o seguinte valor relacionado ao PHP GD, a biblioteca gráfica que é usada por funções como imagepng ();

Caso os pacotes estejam faltando, a maneira de resolvê-los depende da sua configuração local, seja adicionando o pacote usando os comandos do PEAR ou usando o host da Web incorporado na solução para a instalação do pacote.

O que fazer quando o imagejpeg ou o imagepng não está funcionando

No NotePad ++, abra o arquivo PHP que chama a função imagepng e salve-o após ir ao menu Encoding> Convert to UTF-8 sem BOM.

No DreamWeaver, vá para Propriedades da página> Título / Codificação> desmarque Incluir assinatura Unicode (BOM).

Quando o PHP imagejpeg ou imagepng não está funcionando, é mais provável que o arquivo PHP tenha sido codificado com uma BOM, uma lista de materiais e, portanto, informações extras sejam enviadas com a imagem antes dos dados da imagem.

As funções PHP imagejpeg e PHP imagepng são usadas para enviar um código de imagem diretamente na resposta do servidor.

PHP - imagepng não está funcionando corretamente
Função PHP - imagepng
PHP - função imagejpeg

Artigos semelhantes

Comentários (6)

Irvin Vasquez, 2018-08-19
Simple, clear and well explained, many thanks
Joyce Lawrence, 2018-08-19
ありがとう、非常に有益な
Catherine Roberts, 2018-08-19
Dokładnie tego, czego szukałem, idealnie
Headlinext, 2018-08-19
जानकारी का महान टुकड़ा, साझा करने के लिए धन्यवाद
Marshel, 2018-08-19
विश्वास नहीं कर सकता कि मुझे अंत में समाधान मिला, यह लंबे समय तक एक दुःस्वप्न था, अब हल हो गया
porcateraC, 2018-08-19
بالضبط ما كنت أبحث عنه ، مثالي

Deixe um comentário

Aumente a receita publicitária de 50 a 250% com a Ezoic. Um parceiro de publicação certificado do Google.
Aumente a receita publicitária de 50 a 250% com a Ezoic. Um parceiro de publicação certificado do Google.
 
Aumente a receita publicitária de 50 a 250% com a Ezoic. Um parceiro de publicação certificado do Google.
Aumente a receita publicitária de 50 a 250% com a Ezoic. Um parceiro de publicação certificado do Google.