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 end>
Затем, прежде чем использовать функцию заголовка, используйте следующий код, чтобы убедиться, что любой ранее установленный заголовок отбрасывается
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 был закодирован с помощью спецификации, ведомости материалов, и, следовательно, дополнительная информация отправляется вместе с изображением перед данными изображения.
Функции PHP imagejpeg и PHP imagepng - это функции, используемые для отправки кода изображения непосредственно в ответе сервера.
PHP - imagepng не работает должным образомPHP - функция imagepng
PHP - функция imagejpeg