Imaginea generată de PHP GD Imaginea nu poate fi afișată deoarece conține erori în Firefox

Imaginea generată de PHP GD Imaginea nu poate fi afișată deoarece conține erori în Firefox

Atunci când se generează o imagine cu PHP, de exemplu adăugând un filigran pe o imagine stocată de server, utilizând codul de mai jos sau o imagine similară cu JPEG în loc de PNG, este posibil ca imaginea să nu fie generată deloc și să arunce o eroare, vizibilă direct în Firefox, dar nu pe Chrome.

Acest tip de cod, în ciuda faptului că lucrează la unele servere, ar putea lucra acum pe alte motive, uneori din motive obscure. În cazul meu, a funcționat perfect pe plan local, dar a produs o eroare de mai jos pe serverul de internet, imaginea nu poate fi afișată deoarece conține erori.

Problema poate veni din mai multe motive, aici sunt câteva dintre ele:

O ieșire a fost deja stabilită anterior.

O eroare reală de la generarea de imagini.

Se folosește un tip de imagine greșit.

Biblioteca de imagini nu este instalată.

$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');

O ieșire a fost deja stabilită anterior

Chiar dacă nu intenționat, ar putea fi cazul, de exemplu, că alte script-uri anterioare conțineau spații la sfârșit - pentru a evita această eroare, asigurați-vă, așa cum recomandă PHP, să nu închideți scripturile cu tag-ul sfârșitului PHP?

Apoi, înainte de a utiliza funcția antet, utilizați următorul cod pentru a vă asigura că antetul setat anterior este eliminat

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

Și, de asemenea, această funcție pentru a vă asigura că nici o ieșire nu a fost generată înainte de antet și imagine

ob_end_clean();

Acest lucru a rezolvat problema în cazul meu și imaginea a fost corect afișată din nou.

O eroare reală de la generarea de imagini

În cazul în care a fost aruncată o eroare reală în timpul generării de imagini, asigurați-vă că PHP este setat să afișeze toate tipurile de erori posibile și să verifice jurnalele corespunzătoare pentru a putea urmări și rezolva problema.

Următorul cod va face ca PHP să raporteze toate erorile din jurnal:

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

S-ar putea atunci să aflați că au fost raportate unele erori, chiar dacă acestea nu apar în html de ieșire, datorită configurației serverului.

Se folosește un tip de imagine greșit

Asigurați-vă că tipurile de imagini pe care le utilizați sunt corecte, de exemplu, utilizând acest cod pentru a distinge între png și jpeg.

De asemenea, asigurați-vă că antetul este corect în funcție de ieșirea utilizată, în funcție de funcția de generare a imaginii utilizată

//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');

Biblioteca de imagini nu este instalată

Pentru a vă asigura că sunt instalate bibliotecile de imagini. Pentru a face acest lucru, executați funcția phpinfo (); într-un script și verificați ieșirea pentru următoarea valoare legată de PHP GD, biblioteca grafică utilizată de funcții precum imagepng ();

În cazul în care pachetele lipsesc, modul de rezolvare depinde de configurația dvs. locală, fie prin adăugarea pachetului folosind comenzi PEAR, fie prin utilizarea soluției web gazdă construită pentru instalarea pachetului.

Ce trebuie să faceți când imagejpeg sau imagepng nu funcționează

În Notepad ++, deschideți fișierul PHP care apelează funcția imagepng și salvați-l după ce mergeți la meniul Encoding> Convert to UTF-8 fără BOM.

În DreamWeaver, accesați Proprietăți pagină> Title / Encoding> debifați Includeți semnătura Unicode (BOM).

Când PHP imagejpeg sau imagepng nu funcționează, este cel mai probabil datorită faptului că fișierul PHP a fost codificat cu un BOM, un Bill Of Material și, prin urmare, sunt trimise informații suplimentare cu imaginea înainte de datele de imagine.

Funcțiile PHP imagejpeg și PHP imagepng sunt folosite pentru a trimite un cod de imagine direct în răspunsul serverului.

PHP - imagepng nu funcționează corect
Funcția PHP - imagepng
Funcția PHP - imagejpeg

Articole similare

Comentarii (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
بالضبط ما كنت أبحث عنه ، مثالي

Lasa un comentariu