图片不是有效的JPEG格式。

3

我有这段代码:

$image = imagecreatefromjpeg($filename);
$size = getimagesize($filename, $info);

var_dump($image);
var_dump($size);

我收到了以下输出:

Warning: imagecreatefromjpeg(): gd-jpeg: JPEG library reports unrecoverable error
Warning: imagecreatefromjpeg(): 'my_image.jpg' is not a valid JPEG file

bool(false)

array(7) {
  [0]=>
  int(22)
  [1]=>
  int(30)
  [2]=>
  int(2)
  [3]=>
  string(22) "width="22" height="30""
  ["bits"]=>
  int(8)
  ["channels"]=>
  int(3)
  ["mime"]=>
  string(10) "image/jpeg"
}

我收到了警告,说图像不是有效的JPEG文件并且无法加载该文件,但getimagesize表明这是一个JPEG文件(mime类型)。发生了什么事情,我该如何解决?
我尝试了以下方法,但都没有帮助:
1. 检查php.ini中的memory_limit 2. 检查磁盘空间 3. 设置gd.jpeg_ignore_warning
有趣的是,本地服务器上一切正常(当然是使用相同的图像)。

你确认找到了文件吗?试着使用绝对路径去测试图片(根据错误信息,看起来你可能正在使用相对路径),确保你的脚本能够找到它。 - Brian Warshaw
1
只是猜测,但可能是getimagesize()没有解析所有数据(它可能跳过了一些部分),而imagecreatefromjpeg解析了所有数据。 - ComFreek
2
这是一个正确的JPEG图像吗?这个链接能够帮到您吗? - Paolo Gibellini
1
https://dev59.com/j1HTa4cB1Zd3GeqPOAva - putvande
1
它返回以下警告:imagecreatefromstring():gd-jpeg:JPEG库报告不可恢复的错误 - user3106462
显示剩余8条评论
1个回答

1
创建函数 isPNG
<?php

function isPNG($file){
    return preg_match('/'.quotemeta('PNG').'/i', file_get_contents($file));
}

?>

编辑您的代码。
<?php

    if(preg_match('/\.(png)$/i', $filename) || isPNG($filename)){
        $image = imagecreatefrompng($filename);
    }else{
        $image = imagecreatefromjpeg($filename);
    }

    $size = getimagesize($filename, $info);

    var_dump($image);
    var_dump($size);
?>

祝你好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接