Сохранение анимированного gif с вмешательством изображения

Я пытаюсь загрузить анимированный gif в качестве аватара пользователя. Эти изображения преобразуются в base64 с помощью javascript, а затем загружаются с использованием вмешательства изображения.

$img = Image::make(file_get_contents($file));
$mime = $img->mime();
if ($mime == 'image/jpeg')
    $ext= '.jpg';
elseif ($mime == 'image/png')
    $ext= '.png';
elseif ($mime == 'image/gif')
    $ext= '.gif';
elseif($mime == 'image/x-icon')
    $ext = '.ico';
elseif($mime == 'image/bmp')
    $ext = '.bmp';
else {
    $ext = '.jpg';
}
$name = time().$ext;
$path = public_path("images/$controller");
File::isDirectory($path) or File::makeDirectory($path);
if(property_exists($field, 'size') && !$ext=='.gif') {
    $field->size = explode('*',$field->size);
    if($img->resize($field->size[0], $field->size[1])->save("$path/$name")) {
        $data[$key] = $name;
    } else {
        $data[$key] = null;
    }
} else {
    if($img->save("$path/$name")) {
        $data[$key] = $name;
    } else {
        $data[$key] = null;
    }
}

Но эти изображения теряют анимацию после загрузки. Я не знаю что делать. Как не потерять анимацию?

Код Javascript:

reader.onload = function(e) {
    var src = e.target.result;
    var name = file.name;
    var type = file.type;
    var img = "<img src='"+src+"' class='img-fluid mx-auto' alt='image'>";
    $('.card_group_'+field+' .previewContainer_'+count+' .file-loading').remove();
    $('.card_group_'+field+' .previewContainer_'+count+' .imagePreview').append(img);
    $('.card_group_'+field+' .previewContainer_'+count+' .card-header').append(name);
    var input = "input[name='"+field+"']";
    var added = $(input).val();
    if(added == '') {
        $(input).val(src);
    } else {
        $(input).val(added+';'+src);
    }
}
reader.readAsDataURL(file);

person priosshrsth    schedule 25.07.2018    source источник
comment
вы можете показать javascript, который преобразует их в base64?   -  person Quezler    schedule 25.07.2018
comment
Изменен вопрос, чтобы включить javascript. Пожалуйста, проверьте.   -  person priosshrsth    schedule 25.07.2018


Ответы (1)


На данный момент вы можете использовать другую функцию для сохранения, когда это гифка, и продолжать использовать другие из библиотеки.

if ($file->getClientOriginalExtension() == 'gif') {
    copy($file->getRealPath(), $destination);
}
else {
    $image->save($destination);
}

$width = $image->width();
$height = $image->height();
$image->destroy();
person H45H    schedule 30.07.2018
comment
Да, уже сделал это после того, как никто не ответил несколько дней. В любом случае спасибо за предложение. - person priosshrsth; 12.08.2018
comment
Если вы копируете комментарий с форума, укажите его автора github. ru / Intervention / image / issues / 176 # issuecomment-58863939 - person Varun Shridhar; 12.10.2020