PHP JPEG 函数不工作

Posted

技术标签:

【中文标题】PHP JPEG 函数不工作【英文标题】:PHP JPEG Functions Not Working 【发布时间】:2010-08-13 14:37:57 【问题描述】:

任何处理 JPEG 的 php 函数似乎都不能在我的服务器上运行。

这段代码:

<?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

【问题讨论】:

如果您确定 test.jpg 是一个有效的 JPG 文件(注意 GD 无法处理 CMYK JPG - 确保它是 RGB!也请尝试使用其他文件),那么这似乎是一个服务器配置问题最好在 serverfault.com 上询问。 尝试了几个不同的文件,结果相同 【参考方案1】:

您的错误日志清楚地显示您的 PHP 是针对/需要 libjpeg 版本 62 编译的,而您服务器上的库是版本 80。

要么安装正确版本的libjpeg,要么重新编译gd/php

【讨论】:

apt-get 告诉我“libjpeg62-dev 已经是最新版本” libjpeg62 是库,libjpeg62-dev 只是标题。另外,你使用的是标准的 php/gd 包吗? 是的,由“apt get install”安装的标准【参考方案2】:

文件test.jpg 似乎不存在,或者不是正确的文件类型标题(例如,如果有人将 test.png 重命名为 test.jpg,它仍然会有 .png 标题)。尝试使用图像编辑程序创建一个新的 test.jpg 文件,看看它是否有效。

【讨论】:

试过了,还是不行。只是为了确认它确实存在并且我的路径正确,我试图打开一个故意错误的,它给了我一个不同的错误(无法打开文件,或类似的)【参考方案3】:

对我有用的答案是完全解决图像并将其视为字符串。

我会尝试以标准方式进行,但如果不起作用,请尝试将其作为字符串进行

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

GD 和 PHP 的旧版本或组合显然存在一些问题。

在我的情况下,我认为我有一张使用更新版本/压缩的 jpeg 7 的图像。

【讨论】:

以上是关于PHP JPEG 函数不工作的主要内容,如果未能解决你的问题,请参考以下文章

PHP GD 库中不支持 PNG,但支持 GIF 和 JPEG。我怎样才能解决这个问题?

PHP 中的 file_exists 未按预期工作

php jd库 不支持jpeg 怎么办

在 jpeg 文件中隐藏文件是如何工作的

我的 PHP 函数不工作

PHP imagecreatefromstring(): gd-jpeg, libjpeg: 可恢复的错误