【问题标题】:Why do I get "Corrupt JPEG data" message when using imagecreatefromjpeg() function in php?为什么在 php 中使用 imagecreatefromjpeg() 函数时会收到“损坏的 JPEG 数据”消息?
【发布时间】:2017-05-15 23:59:04
【问题描述】:

我正在使用 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() 函数时会收到“损坏的 JPEG 数据”消息?

【问题讨论】:

  • 在文本编辑器中打开损坏的 jpeg 文件,查看其中包含的错误信息
  • 当我打开损坏的文件时,它是一个包含大量加密字母的文件,例如“#ôZ÷ôÚ˝Ùa*»ıVV/ß»*óCàP¶Ṵ˙é,làÉ!í 'Ú+´c"

标签: php file-upload


【解决方案1】:

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

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

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

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

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

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

ini_set("gd.jpeg_ignore_warning", 1);

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

$im 现在包含您的图像。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      这里@ 是错误抑制器。

      【讨论】:

        猜你喜欢
        • 2019-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-19
        • 2015-01-01
        • 1970-01-01
        相关资源
        最近更新 更多