在laravel中将.heic图像转换为jpg图像格式

在laravel中将.heic图像转换为jpg图像格式,laravel,imagemagick-convert,heic,Laravel,Imagemagick Convert,Heic,我添加了干预/image包来转换laravel中的图像格式 图像转换成功,但上传后图像质量太差 原始图像 上传的图像 要转换Heic图像,您必须使用imagick,是否可以改用它 这是如何安装的 试试看{ $image=new\Imagick(); $image->readImageBlob($image['base64']); $image->setImageFormat(“jpeg”); $image->setImageCompressionQuality(100); $image->

我添加了干预/image包来转换laravel中的图像格式

图像转换成功,但上传后图像质量太差

原始图像

上传的图像


要转换Heic图像,您必须使用imagick,是否可以改用它

这是如何安装的

试试看{
$image=new\Imagick();
$image->readImageBlob($image['base64']);
$image->setImageFormat(“jpeg”);
$image->setImageCompressionQuality(100);
$image->writeImage($targetdir.$uid..jpg”);
} 
捕获(\ImagickException$ex){
/**@var\Exception$ex*/
返回新的JSONResponse([“error”=>“Imagick无法转换图像,请检查是否满足所有要求。”,“details”=>$ex->getMessage()],Http::STATUS\u INTERNAL\u SERVER\u error);
}

有点晚了,但我也遇到了同样的问题。 我设法用heic2any js库()实现了这一点

我在客户端转换了图片,然后将其输入到客户端。 服务器正在查看它,因为它最初是作为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);

     });
函数转换器heictojpg(输入)
{
var fileName=$(输入).val();
var fileNameExt=fileName.substr(fileName.lastIndexOf('.')+1);
如果(fileNameExt==“heic”){
var blob=$(输入)[0]。文件[0];//ev.target.files[0];
海尼({
滴:滴,
toType:“image/jpg”,
})
.then(函数(resultBlob){
var url=url.createObjectURL(resultBlob);
$(输入).parent().find(“.upload file”).css(“背景图像”,“url”(+url+));//预览上传的图片
//将转换后的图片添加到原始图片
让fileInputElement=$(输入)[0];
让容器=新的数据传输();
让file=newfile([resultBlob],“heic”+“.jpg”,{type:“image/jpeg”,lastModified:new Date().getTime()});
container.items.add(文件);
fileInputElement.files=container.files;
控制台日志(“添加”);
})
.catch(函数(x){
console.log(x.code);
console.log(x.message);
});
}
}
$(“#输入”).change(函数(){
convertHeicToJpg(本);
});
我正在做的是将heic图片转换为jpg,然后预览它。 之后,我将其添加到原始输入中。服务器端会将其视为上传的JPG。
转换时可能会出现一些延迟,因此我在上载时放置了加载程序gif。

很抱歉,这不起作用。我仍然收到一个错误:无法从路径(/tmp/phpoMTE96)读取图像。
    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);

     });