Мой PHP не может создать истинное цветное изображение
У меня есть скрипт, который используется для создания истинного цветного изображения.
Но после смены сервера новая установка PHP не показывает изображение.
Вот пример: http://www.europasprak.com/engine/system/utils/printBarImage.php?color=%239999FF&width=3&height=10
Исходный код:
<?PHP
require_once("website.php");
$color = LibEnv::getEnvHttpGET("color");
$width = LibEnv::getEnvHttpGET("width");
$height = LibEnv::getEnvHttpGET("height");
$color = urldecode($color);
if ($color && $width > 0 && $height> 0) {
LibImage::printBarImage($color, $width, $height);
}
// Print a bar image
static function printBarImage($color, $width, $height) {
// Create a blank image
$image = imagecreatetruecolor($width, $height);
if (strlen($color) == 6) {
$color = "#" . $color;
}
$r = intval(substr($color, 1, 2), 16);
$g = intval(substr($color, 3, 2), 16);
$b = intval(substr($color, 5, 2), 16);
$color = imagecolorallocate($image, $r, $g, $b);
// Fill up the image background
imagefilledrectangle($image, 0, 0, $width, $height, $color);
// Header indicating the image type
header("Content-type:image/jpeg");
// Create the image in the best jpeg quality
imagejpeg($image, NULL, 100);
// Destroy the image
imagedestroy($image);
}
?>
Моя информация о версии PHP 5.6.20 содержит следующее:
GD Support enabled
GD Version bundled (2.1.0 compatible)
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.5.2
GIF Read Support enabled
GIF Create Support enabled
JPEG Support enabled
libJPEG Version 6b
PNG Support enabled
libPNG Version 1.2.50
WBMP Support enabled
XBM Support enabled
ОБНОВЛЕНИЕ: я закомментировал вывод изображения и добавил существующее внешнее изображение для отладки:
// imagejpeg($image, NULL, 100);
$img=imagecreatefromjpeg("http://www.google.com/logos/doodles/2016/faten-hamamas-85th-birthday-4804306106580992-hp2x.jpg");
imagejpeg($img, NULL, 100);
И проблема остается той же.
Так что это, вероятно, не связано с моей настройкой GD, а связано с типом контента.
Я удалил все символы спецификации:
tail --bytes=+4 lib/image.php
tail --bytes=+4 system/utils/printBarImage.php
Я пробовал разные кодировки:
iconv -f ISO-8859-1 -t utf-8 ... -o ...
РЕДАКТИРОВАТЬ: я обновил свою библиотеку GD, чтобы:
GD Support enabled
GD headers Version 2.2.4
GD library Version 2.2.4
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.7.1
GIF Read Support enabled
GIF Create Support enabled
JPEG Support enabled
libJPEG Version unknown
PNG Support enabled
libPNG Version 1.6.28
WBMP Support enabled
XPM Support enabled
libXpm Version 30411
XBM Support enabled
Используя error_log(), я вижу, что $image = imagecreatetruecolor($width, $height);
вызов функции создает идентификатор ресурса № 678 и что $color = imagecolorallocate($image, $r, $g, $b);
Вызов функции возвращает код цвета 6737049.
Эта проблема осталась прежней, хотя.
Я также попытался использовать другую функцию вместо imagejpeg($image, NULL, 100);
и поэтому я попробовал первым imagepng($image);
а потом imagegif($image);
но проблема снова осталась прежней.
Если я закомментирую header("Content-type:image/jpeg");
тогда вывод выглядит так: ����JFIF``��
с исходным кодом:
����JFIF``��<CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 100
��C��C��
��
���}!1AQa"q2���#B��R��$3br�
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������
���w!1AQaq"2�B���� #3R�br�
$4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������?�@����(��
(��?�
Мой браузер выбора - Chrome.
Теперь, если я открою изображение в Firefox, оно показывает это: The image ... cannot be displayed because it contains errors.
,
РЕДАКТИРОВАТЬ: я добавил некоторые сообщения об ошибках, и в журнале было это, чтобы показать:
PHP Parse error: imagepng(): gd-png error: cannot allocate libpng main struct