为什么在php中使用imagecreatefromjpeg()函数时会收到“Corrupt JPEG data”消息?

时间:2012-07-04 06:28:38

标签: php file-upload

我正在使用imagecreatefromjpeg()函数通过上传表格上传图片:

$folder = '../images/';
$image = imagecreatefromjpeg($_FILES['image']['tmp_name']);
$new = imagecreatetruecolor(300, 300);
imagecopyresampled($new, $image, 0, 0, 0, 0, 300, 300, 150, 150);
imagejpeg($new, $folder, 100);

大多数照片上传都很好,但有些会显示此错误:

  

警告:imagecreatefromjpeg()[function.imagecreatefromjpeg]:   gd-jpeg,libjpeg:可恢复的错误:损坏的JPEG数据:756无关紧要   标记0xed之前的字节

似乎发生了一些但不是全部的'.jpeg'文件。我没有看到'.jpg'文件出现问题,但我无法确定该问题是'.jpeg'文件所独有的。我注意到如果我将问题文件的扩展名从“.jpeg”更改为“.jpg”,它就可以正常工作。

为什么在php中使用imagecreatefromjpeg()函数时会出现“Corrupt JPEG data”消息?

3 个答案:

答案 0 :(得分:8)

  

我注意到如果我将问题文件的扩展名从“.jpeg”更改为“.jpg”,它就可以正常工作。

您刚刚重命名,还是在图形程序中重新保存?

无论如何,您的文件似乎已损坏。看看Bug #39918 imagecreatefromjpeg doesn't work

  

GD确实提供了一种机制,可以更好地容忍破坏的jpeg图像。

     

使用error_reporting(E_ALL);而开发会告诉你发生了什么。 GD确实报告了jpeg编解码器中的一些错误。某些jpeg错误是可恢复的,如此图像中的错误。

     

您可以使用gd.jpeg_ignore_warning更改jpeg编解码器的行为:

     

ini_set(“gd.jpeg_ignore_warning”,1);

     

$ im = imagecreatefromjpeg(“test.jpeg”);

     

$ im现在包含您的图片。

答案 1 :(得分:0)

这可以通过以下方式解决: ini_set('gd.jpeg_ignore_warning',1);

答案 2 :(得分:0)

尝试添加@imagecreatefromjpeg($img)而不是imagecreatefromjpeg($img)

此处@是错误抑制器。