Зображення з PHP GD Зображення не може відображатися, оскільки воно містить помилки в Firefox




Під час створення зображення за допомогою PHP, наприклад, додавання водяного знака до картинки, збереженої на сервері, за допомогою коду нижче або аналогічного з файлами JPEG замість PNG, зображення може не створюватися взагалі та виникати з помилкою, безпосередньо видимим у Firefox, але не на Chrome

Цей тип коду, незважаючи на роботу на деяких серверах, може тепер працювати на деяких інших, іноді за неясними причинами. У моєму випадку, він працював ідеально добре на місці, але вироблявся нижче помилки на інтернет-сервері, зображення не може відображатися, оскільки він містить помилки.

Питання може бути з кількох причин, ось деякі з них:

Вихід вже був встановлений раніше.

Справжня помилка під час створення зображення.

Неправильний тип зображення використовується.

Бібліотека зображень не встановлена.

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

Вихід вже був встановлений раніше

Навіть якщо це не навмисно, може бути, наприклад, що наприкінці інших попередніх скриптів було пробіли - щоб уникнути цієї помилки, переконайтеся, що PHP рекомендує не закривати скрипти з кінцевим тегом PHP?>

Потім перед використанням функції заголовка використовуйте такий код, щоб переконатися, що будь-який попередньо встановлений заголовок відкидається

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

А також цю функцію, щоб переконатися, що перед заголовком та зображенням не було створено жодного виводу

ob_end_clean();

Це вирішило проблему в моєму випадку, і зображення було правильно відображене знову.

Справжня помилка під час створення зображення

У випадку, коли під час створення зображення виникла реальна помилка, переконайтеся, що PHP встановлено для відображення всіх можливих видів помилок і перевірте відповідні журнали, щоб мати змогу відстежувати його та вирішити.

Наступний код зроблять PHP повідомленнями про всі помилки в журналі:

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

Ви можете з'ясувати, що деякі помилки були зареєстровані, навіть якщо вони не з'являються у вихідному html, через конфігурацію сервера.

Неправильний тип зображення використовується

Переконайтеся, що типи зображень, які ви використовуєте, правильні, наприклад, використовуючи цей код, щоб відрізняти png та jpeg.

Також переконайтеся, що заголовок правильний відповідно до використовуваного виходу, залежно від використовуваної функції генерації зображень

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

Бібліотека зображень не встановлена

Переконайтеся, що бібліотеки зображень встановлені. Для цього запустіть функцію phpinfo (); у скрипті та перевірте вивід для наступного значення, пов'язаного з PHP GD, графічною бібліотекою, яка використовується такими функціями, як imagepng ();

У випадку відсутності пакетів, спосіб вирішення цієї проблеми залежить від вашої локальної конфігурації - додавання пакету за допомогою команд PEAR або використання веб-хоста, вбудованого в рішення для встановлення пакета.

Що робити, коли imagejpeg або imagepng не працює

У програмі NotePad ++ відкрийте файл PHP, який викликає функцію imagepng, і збережіть його після переходу до меню Кодування> Перетворення в UTF-8 без специфікації.

У DreamWeaver перейдіть до пункту Властивості сторінки> Заголовок / кодування> зніміть прапорець Включити підпис Unicode (BOM).

Коли PHP imagejpeg або imagepng не працює, то, швидше за все, це пов'язано з тим, що файл PHP був закодований з BOM, Bill Of Material, і тому до зображення передаються додаткові відомості з зображенням.

Функції PHP imagejpeg і PHP imagepng є функцією, що використовується для відправки коду зображення безпосередньо у відповідь сервера.

PHP - imagepng не працює належним чином
Функція PHP - imagepng
Функція PHP - imagejpeg


Міжнародний бізнес-консалтинг
Про автора - Міжнародний бізнес-консалтинг
Йоанн - міжнародний бізнес-консультант, координатор та координатор. Він працював понад 10 років у глобальному бізнесі, ланцюжку поставок, фінансових, SAP ERP-проектах, веб-та SEO-оптимізації для різних галузей промисловості, таких як логістика, косметика, товари народного споживання, догляд за красою чи мода в більш ніж 30 країнах світу. .
 


Коментарі (6)

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

Залишити коментар