преобразовать изображение .heic в формат изображения jpg в laravel

Я добавил пакет intervention/image для преобразования формата изображения в laravel.

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

Исходное изображение Исходное изображение

Загруженное изображение Загруженное изображение

размытие изображения

$img =(string) Image::make($image['base64'])
    ->resize(500, 500)->encode('jpg',100);;
$img = base64_encode($img);

person priyeshvadhiya    schedule 07.04.2020    source источник


Ответы (2)


Чтобы преобразовать изображение Heic, вы должны использовать imagick, можете ли вы использовать это вместо этого

Вот как установить https://ourcodeworld.com/articles/read/645/how-to-install-imagick-for-php-7-in-ubuntu-16-04

try {
    $image = new \Imagick();
    $image->readImageBlob($image['base64']));
    $image->setImageFormat("jpeg");
    $image->setImageCompressionQuality(100);
    $image->writeImage($targetdir.$uid.".jpg"); 
} 
catch (\ImagickException $ex) {
    /**@var \Exception $ex */
    return new JSONResponse(["error" => "Imagick failed to convert the images, check if you fulfill all requirements." , "details" => $ex->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR);
}
person Quantumass    schedule 10.04.2020
comment
Извините, но это не работает. Я все еще получаю сообщение об ошибке: Невозможно прочитать изображение из пути (/tmp/phpoMTE96). - person zachu; 08.08.2020

Немного поздно, но у меня была та же проблема. Мне удалось это сделать с помощью js-библиотеки heic2any (https://github.com/alexcorvi/heic2any/blob/master/docs/getting-started.md)

Я преобразовал картинку на стороне клиента, затем отдал ее на вход на стороне клиента. Сервер видит его, поскольку он был изначально загружен в формате jpg.

    function convertHeicToJpg(input)
    {
        var fileName = $(input).val();
        var fileNameExt = fileName.substr(fileName.lastIndexOf('.') + 1);
        if(fileNameExt == "heic") {
            var blob = $(input)[0].files[0]; //ev.target.files[0];
            heic2any({
                blob: blob,
                toType: "image/jpg",
            })
                .then(function (resultBlob) {

                    var url = URL.createObjectURL(resultBlob);
                    $(input).parent().find(".upload-file").css("background-image", "url("+url+")"); //previewing the uploaded picture
                    //adding converted picture to the original <input type="file">
                    let fileInputElement = $(input)[0];
                    let container = new DataTransfer();
                    let file = new File([resultBlob], "heic"+".jpg",{type:"image/jpeg", lastModified:new Date().getTime()});
                    container.items.add(file);

                    fileInputElement.files = container.files;
                    console.log("added");
                })
                .catch(function (x) {
                    console.log(x.code);
                    console.log(x.message);
                });
        }
    }

    $("#input").change(function() {
            convertHeicToJpg(this);

     });

Что я делаю, так это конвертирую изображение heic в jpg, а затем просматриваю его. После этого я добавляю его к исходному вводу. Серверная сторона будет рассматривать его как загруженный jpg. При конвертации может возникнуть некоторая задержка, поэтому при загрузке я поместил гифку-загрузчик.

person Mátyás Grőger    schedule 12.04.2021