2

我正在使用 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 数据:标记 0xed 之前的 756 个无关字节

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

为什么在 php 中使用 imagecreatefromjpeg() 函数时会收到“损坏的 JPEG 数据”消息?

4

3 回答 3

9

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

你只是重命名它,还是在图形程序中重新保存?

无论如何,您的文件似乎已损坏。查看错误 #39918 imagecreatefromjpeg 不起作用

GD 确实提供了一种更能容忍损坏的 jpeg 图像的机制。

使用错误报告(E_ALL);在开发时会告诉你发生了什么。GD 确实报告了 jpeg 编解码器中的一些错误。一些 jpeg 错误是可以恢复的,就像这张图片中的那些。

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

ini_set("gd.jpeg_ignore_warning", 1);

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

$im 现在包含您的图像。

于 2013-04-04T04:32:35.343 回答
-1

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

于 2013-10-13T15:26:54.367 回答
-1

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

@是错误抑制器。

于 2017-05-15T15:03:31.700 回答