Obraz generowany przez GD w PHP Obraz nie może być wyświetlany, ponieważ zawiera błędy w Firefoksie

Obraz generowany przez GD w PHP Obraz nie może być wyświetlany, ponieważ zawiera błędy w Firefoksie

Podczas generowania obrazu za pomocą PHP, na przykład dodawania znaku wodnego do obrazu przechowywanego na serwerze, przy użyciu poniższego kodu lub podobnego z obrazem JPEG zamiast PNG, obraz może nie być generowany i zgłaszać błąd, widoczny bezpośrednio w przeglądarce Firefox, ale nie w Chrome.

Ten rodzaj kodu, pomimo pracy na niektórych serwerach, może teraz działać na innych, czasem z niejasnych powodów. W moim przypadku działało idealnie dobrze lokalnie, ale wyprodukowane poniżej błędu na serwerze internetowym, obraz nie może być wyświetlany, ponieważ zawiera błędy.

Problem może wynikać z kilku powodów: oto niektóre z nich:

Dane wyjściowe zostały już wcześniej ustawione.

Prawdziwy błąd generowania obrazu.

Używany jest niewłaściwy typ obrazu.

Biblioteka obrazów nie jest zainstalowana.

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

Dane wyjściowe zostały już wcześniej ustawione

Nawet jeśli nie celowo, może być na przykład na przykład, że inne poprzednie skrypty zawierały spacje na końcu - aby uniknąć tego błędu, upewnij się, że, jak zaleca PHP, nie zamykaj skryptów z tagiem końcowym PHP?>

Następnie, przed użyciem funkcji nagłówka, użyj następującego kodu, aby upewnić się, że poprzednio ustawiony nagłówek został odrzucony

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

A także ta funkcja, aby upewnić się, że nie zostały wygenerowane żadne dane wyjściowe przed nagłówkiem i obrazem

ob_end_clean();

Rozwiązało to problem w moim przypadku, a obraz został poprawnie wyświetlony ponownie.

Prawdziwy błąd generowania obrazu

W przypadku wygenerowania prawdziwego błędu podczas generowania obrazu, upewnij się, że PHP jest ustawione na wyświetlanie wszystkich możliwych rodzajów błędów i sprawdź odpowiednie dzienniki, aby móc je wyśledzić i rozwiązać.

Poniższy kod sprawi, że PHP zgłosi wszystkie błędy w dzienniku:

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

Możesz wtedy dowiedzieć się, że zgłoszono pewne błędy, nawet jeśli nie pojawiły się w wyjściowym html, z powodu konfiguracji serwera.

Używany jest niewłaściwy typ obrazu

Upewnij się, że używane typy obrazów są poprawne, na przykład używając tego kodu, aby odróżnić png i jpeg.

Upewnij się także, że nagłówek jest poprawny w zależności od użytego wyjścia, w zależności od użytej funkcji generowania obrazu

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

Biblioteka obrazów nie jest zainstalowana

Aby upewnić się, że biblioteki obrazów są zainstalowane. Aby to zrobić, uruchom funkcję phpinfo (); w skrypcie i sprawdź dane wyjściowe dla następującej wartości związanej z PHP GD, biblioteki graficznej używanej przez funkcje takie jak imagepng ();

W przypadku braku pakietów, sposób rozwiązania zależy od konfiguracji lokalnej, poprzez dodanie pakietu za pomocą poleceń PEAR lub za pomocą wbudowanego rozwiązania hosta internetowego do instalacji pakietu.

Co robić, gdy imagejpeg lub imagepng nie działa

W NotePad ++ otwórz plik PHP wywołujący funkcję imagepng i zapisz go po przejściu do menu Kodowanie> Konwertuj na UTF-8 bez BOM.

W DreamWeaver przejdź do Właściwości strony> Tytuł / Kodowanie> usuń zaznaczenie opcji Dołącz sygnaturę Unicode (BOM).

Gdy PHP imagejpeg lub imagepng nie działa, najprawdopodobniej jest to spowodowane faktem, że plik PHP został zakodowany za pomocą BOM, Bill of Material, a zatem dodatkowe informacje są wysyłane z obrazem przed danymi obrazu.

Funkcje PHP imagejpeg i PHP imagepng służą do wysyłania kodu obrazu bezpośrednio w odpowiedzi serwera.

PHP - imagepng nie działa poprawnie
PHP - funkcja imagepng
PHP - funkcja imagejpeg

Podobne artykuły

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

zostaw komentarz