imagecreatefromjpeg(): gd-jpeg: JPEG库报告不可恢复的错误 - Laravel

4

我有以下两个路由:

Route::get('resize/avatar', function() {
    $image = 'avatar.jpg';
    $target_filename_here = 'thumbnail_'.$image;
    $ffs = imagecreatefromjpeg($image);
    $size = getimagesize($image);
    $dst = imagecreatetruecolor(100,100);
    $dds = imagecopyresampled($dst,$ffs,0,0,0,0,100,100,$size[0],$size[1]);
    $dn = imagepng($dst,$target_filename_here); // adjust format as needed
    imagedestroy($ffs);
    imagedestroy($dst);
    if($dds) {
        return Redirect::to('color/');
    } else {
        return 'Failed to load the Profile Picture';
    }
});


Route::get('color/', function() {
    if(file_exists('thumbnail_avatar.jpg')) {
        $dest = imagecreatefrompng('transcript.png');
        $fn = imagecreatefromjpeg('thumbnail_avatar.jpg');
        imagecopy($dest, $fn, 550, 830, 0, 0, imagesx($fn), imagesy($fn));
        imagejpeg($dest,"test4.jpg",90);
        imagedestroy($dest);
        imagedestroy($fn);
        return HTML::image('test4.jpg');
    } else {
        return Redirect::to('resize/avatar');
    }
});

我遇到了一个标题为“imagecreatefromjpeg(): gd-jpeg: JPEG library reports unrecoverable error:”的错误,我正在努力找出问题所在,但是无法找到。

我使用的框架是“Laravel 4.2”,但我非常确定它与框架无关,因为函数是纯php。

简短概述

我正在尝试创建个人资料图片的缩略图,并将其合并到另一张图片中。在这样做时,我遇到了以下错误:imagecreatefromjpeg(): gd-jpeg: JPEG library reports unrecoverable error:

我已经在stackoverflow和google上搜索了类似于我的错误,但我无法找到并进行调试。

更新: enter image description here

谢谢

FAQ :-

  1. 内存限制? ==> 我有足够的内存。

  2. 在函数中使用“@”隐藏错误? ==> 这并不重要。我仍然面临这个问题。

  3. 您是否尝试过其他图像? ==> 是的,我尝试过其他图像,并且成功了,只有“生成的缩略图”会出现问题。

我的问题 请尝试使用以下非Laravel脚本:

function resizeImage() {
    $image = 'avatar.jpg';
    $target_filename_here = 'thumbnail_'.$image;
    $ffs = imagecreatefromjpeg($image);
    $size = getimagesize($image);
    $dst = imagecreatetruecolor(100,100);
    $dds = imagecopyresampled($dst,$ffs,0,0,0,0,100,100,$size[0],$size[1]);
    $dn = imagepng($dst,$target_filename_here); // adjust format as needed
    imagedestroy($ffs);
    imagedestroy($dst);
    if($dds) {
        color();
    } else {
        return 'Failed to load the Profile Picture';
    }
}

function colorCheck() {
    if(file_exists('thumbnail_avatar.jpg')) {
        $dest = imagecreatefrompng('transcript.png');
        $fn = imagecreatefromjpeg('thumbnail_avatar.jpg');
        imagecopy($dest, $fn, 550, 830, 0, 0, imagesx($fn), imagesy($fn));
            imagejpeg($dest,"test4.jpg",90);
            imagedestroy($dest);
            imagedestroy($fn);
        return HTML::image('test4.jpg');
    } else {
        resizeImage();
    }
}

你可以看到错误信息。

谢谢。


请粘贴完整的错误消息,包括堆栈跟踪。 - Dan Smith
请检查相关图片。谢谢。 - user3767643
如何检查那个? - user3767643
可能是 https://dev59.com/72kv5IYBdhLWcg3waAJT 的重复问题。 - Syed Waqas Bukhary
2个回答

5
我知道我有点晚了,但我刚遇到类似的问题,让我很疯狂。
回答你的问题:“……我正在努力找出问题出在哪里……”错误是在此处创建的:
$ffs = imagecreatefromjpeg($image);

这个错误是由执行这行代码引起的,在上传一个jpg图片并使用PHP GD2库进行处理时。
我按照下面链接中的解决方案,解决了我的问题。

http://anvilstudios.co.za/blog/2010/02/23/imagecreatefromjpeg-gd-jpeg-library-reports-unrecoverable-error/

我希望有人能发现这篇文章有用,节省一些时间。向来自anvilstudios的Nico致敬。
更新 对于无法访问链接的人,这里是代码。
$file_tempname = null;
if (is_uploaded_file($FILE['tmp_name'])) {
    $file_tempname = $FILE['tmp_name'];
}
else{
    exit('Wrong file type');
}

$file_dimensions = getimagesize($file_tempname);
$file_type = strtolower($file_dimensions['mime']);

if ($file_type=='image/jpeg'||$file_type=='image/pjpeg'){
    if(imagecreatefromjpeg($file_tempname)){
        $ffs = imagecreatefromjpeg($file_tempname);
        return $ffs;    
    } 
}

也许你可以在回答中包含解决方案?Stack Overflow 真的不喜欢坏掉的链接。 - Nissa
链接没有损坏。我刚刚一分钟前访问了它...我已经更新了我的答案,为那些无法访问链接的人提供了代码。 - user4504661
我知道这个链接现在没有问题,但是它将来可能会失效,而到那时你很可能已经忘记了它。 - Nissa
2
为什么你要不必要地调用 imagecreatefromjpeg($file_tempname) 两次呢…?! - deceze
两年后。链接已经失效了。就是这样。 - Soulriser

2
我找到的解决方案如下:
$file_dimensions = getimagesize($_SERVER['DOCUMENT_ROOT'] . $fileUrl);
$ImageType = strtolower($file_dimensions['mime']);
switch(strtolower($ImageType))

{
 case 'image/png':
  $img_r = imagecreatefrompng($_SERVER['DOCUMENT_ROOT'] . $fileUrl);
 break;
 case 'image/jpeg':
  $img_r = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT'] . $fileUrl);
break;
 default:
  die('Unsupported File!'); //output error
}

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