Мой 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

1 ответ

Я обновил PHP до 5.6.30, и это решило проблему.

Другие вопросы по тегам