Функции PHP JPEG не работают

Любые функции PHP, работающие с JPEG, похоже, не работают на моем сервере.

Этот код:

<?php
$im = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5,  'A Simple Text String', $text_color);
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
?>

создает пустой файл.

Использование функции GIF или PNG создаст изображение, содержащее текст «Простая текстовая строка», как и ожидалось.

Этот:

$im = imagecreatefromjpeg("test.jpg");

возвращается

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: 'test.jpg' is not a valid JPEG file in /path/to/test.php on line 2

phpinfo() показывает:

gd
GD Support  enabled
GD Version  2.0 or higher
FreeType Support    enabled
FreeType Linkage    with freetype
FreeType Version    2.3.9
T1Lib Support   enabled
GIF Read Support    enabled
GIF Create Support  enabled
JPG Support     enabled
PNG Support     enabled
WBMP Support    enabled 

И веб-сервер может читать любые соответствующие файлы.

Функции GIF и PNG работают нормально, как и ожидалось.

Есть идеи?

ИЗМЕНИТЬ:

Нашел это в моем файле журнала ошибок Apache:

gd-jpeg: JPEG library reports unrecoverable error: Wrong JPEG library version: library is 80, caller expects 62

person Oli    schedule 13.08.2010    source источник
comment
Если вы уверены, что test.jpg является действительным файлом JPG (обратите внимание, что GD не может работать с файлами CMYK JPG — убедитесь, что это RGB! Также попробуйте использовать другой файл), то, похоже, это проблема конфигурации сервера, которую лучше задать на serverfault.com.   -  person Pekka    schedule 16.08.2010
comment
Пробовал с несколькими разными файлами с тем же результатом   -  person Oli    schedule 16.08.2010


Ответы (3)


Ваш журнал ошибок ясно показывает, что ваш PHP скомпилирован/требует libjpeg версии 62, в то время как библиотека на вашем сервере имеет версию 80.

Либо установите правильную версию libjpeg, либо перекомпилируйте gd/php.

person gnud    schedule 16.08.2010
comment
apt-get сообщает мне, что libjpeg62-dev уже является самой новой версией - person Oli; 16.08.2010
comment
libjpeg62 — это библиотека, libjpeg62-dev — это просто заголовки. Кроме того, вы используете стандартные пакеты php/gd? - person gnud; 16.08.2010
comment
Да, стандартно, как установлено с помощью apt get install - person Oli; 16.08.2010

Похоже, что файл test.jpg не существует или имеет неправильные заголовки типа файла (например, если кто-то переименует файл test.png в test.jpg, он все равно будет иметь заголовки .png). Попробуйте создать новый файл test.jpg с помощью программы редактирования изображений и посмотрите, работает ли он.

person Ben    schedule 13.08.2010
comment
Пробовали это, и все еще не работает. Просто чтобы подтвердить, что он существует и я правильно указал путь, я попытался открыть тот, который был намеренно неверным, и выдал другую ошибку (не удается открыть файл или что-то подобное). - person Oli; 13.08.2010

Ответ, который сработал для меня, заключался в том, чтобы полностью обойти изображение и преобразовать его в строку.

Я попробую сделать это стандартным способом, но если это не сработает, попробуйте в виде строки

      $src = imagecreatefromjpeg($file);
      if (!$src) {
      $src = imagecreatefromstring(file_get_contents($file));
      }

По-видимому, есть некоторые проблемы со старыми версиями или комбинациями GD и PHP.

В моем случае у меня было изображение, использующее более новую версию/сжатие jpeg 7, я думаю.

person roberthuttinger    schedule 24.01.2019