imagecreatefromjpeg(): gd-jpeg: библиотека JPEG сообщает о неисправимой ошибке - Laravel

У меня есть 2 следующих маршрута: -

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');
    }
});

И я получаю ошибку в качестве заголовка, я пытаюсь понять, где я создаю проблему, но не могу ее найти.

Мой фреймворк, который я использую, это "Laravel 4.2", но я почти уверен, что он не имеет ничего общего с фреймворком, так как функции - это чистый php.

для TL;DR

Я пытаюсь создать миниатюру изображения профиля, а затем объединить ее с другим изображением. При этом я получаю :- imagecreatefromjpeg(): gd-jpeg: JPEG library reports unrecoverable error:

Я уже искал stackoverflow и google для ошибки, подобной моей, но я не могу найти и отладить.

Обновление: введите здесь описание изображения

Спасибо

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ :-

  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();
    }
}

И вы можете увидеть ошибку.

Спасибо


person user3767643    schedule 20.03.2015    source источник
comment
Вставьте полное сообщение об ошибке, включая трассировку стека, пожалуйста   -  person Dan Smith    schedule 20.03.2015
comment
Пожалуйста, проверьте рассматриваемое изображение. Спасибо   -  person user3767643    schedule 20.03.2015
comment
как это проверить???   -  person user3767643    schedule 20.03.2015
comment
Возможный дубликат stackoverflow.com/questions/10611883/   -  person Syed Waqas Bukhary    schedule 20.09.2016


Ответы (2)


Я знаю, что немного опоздал, но у меня была похожая проблема, и это сводило меня с ума.

Чтобы ответить на ваш вопрос "...Я пытаюсь понять, где я создаю проблему"... Ошибка создается на

$ffs = imagecreatefromjpeg($image);

Эта ошибка возникла из-за выполнения этой строки кода при загрузке изображения jpg и последующей работе с ним с библиотекой PHP GD2.

Я следовал решению по ссылке ниже, и это решило мою проблему.

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

Я надеюсь, что кто-то найдет это полезным и сэкономит время. Престижность Нико из anvilstudios

Обновление Для тех, кто не может получить доступ к ссылке, вот код

$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;    
    } 
}
person user4504661    schedule 09.02.2017
comment
Может быть, вы могли бы включить решение в свой ответ? Stack Overflow действительно не любит битые ссылки. - person Nissa; 09.02.2017
comment
ссылка не битая. Я только что получил к нему доступ минуту назад ... Я обновил свой ответ кодом для тех, кто не может получить доступ к ссылке - person user4504661; 10.02.2017
comment
Я знаю, что ссылка цела, но в будущем она может выйти из строя, и к тому времени вы, вероятно, забудете о ней. - person Nissa; 10.02.2017
comment
Почему вы без нужды звоните imagecreatefromjpeg($file_tempname) дважды…?! - person deceze♦; 09.08.2017
comment
Два года спустя. Ссылка не работает. Ну вот. - person Soulriser; 16.01.2019

решение, которое я нашел, следующее:

$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
}
person Migue Cortés    schedule 16.10.2017