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

zec*_*ude 1 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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

sec*_*tus 8

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

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

无论如何,您的文件似乎已被破坏.看看Bug#39918 imagecreatefromjpeg不起作用.

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现在包含您的图像.