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, либо с помощью встроенного в веб-узел решения для установки пакета.
источники
- PHP : adding watermarks to images using alpha channels manual — PHP.net
- PHP : imagepng manual — PHP.net
- PHP : ob_end_clean manual — PHP.net
- Debugging : how to get useful error messages in PHP ? — stackoverflow.com
- Need PHP/Pear extension GD — linuxquestions.org
- Image dynamically displayed using PHP functions — www.wcifly.com