无法读取来自文件.SVG图像(干预/图像)(Unable to read image from fi

2019-09-29 19:54发布

所以我做的图片上传,我想使缩略图而且还支持SVG为好,因为GD不支持SVG类型的我第一次尝试切换在config / image.php文件imagick但这并没有改变任何东西。

对此我不确定,因为它没有说明它支持的话,我失去了必需的包,我必须安装? 如果是这样的哪一个?

但随着中说,当我试图把它上传美国SVG图像:

NotReadableException in Decoder.php line 20:
Unable to read image from file (D:\xampp\htdocs\laravel\public\up/2017/01/07000323-logoSep.svg).

我第一次尝试用一个简单的解决这个IF结构,我并不真的需要SVG图像的缩略图,通过使用 - > MIME(),但那么它只是形象地说无法打开/读取两种。

$image = $request->file('file');
$imageName = date("dHis-").$image->getClientOriginalName();
$uploadPath = public_path('up/').date("Y/m");
$image->move($uploadPath,$imageName);
$imageMime = Image::make($uploadPath.'/'.$imageName);
if($imageMime->mime() != "image/svg+xml"){}

与我首先想到这是由权限问题引起的,所以我确信我的所有文件的读取和写入,但并没有改变的问题。

于是,我就自己基础上的实际延伸,而不是MIME类型,其一定程度上确实在我的情况下,下面的工作:

public function dropzoneStore(Request $request){
    $image = $request->file('file');
    $imageName = date("dHis-").$image->getClientOriginalName();
    $uploadPath = public_path('up/').date("Y/m");
    $image->move($uploadPath,$imageName);
    if($image->getClientOriginalExtension() != 'svg'){
        $imageThmb = Image::make($uploadPath.'/'.$imageName);
        $imageThmb->fit(300,300,function($constraint){$constraint->upsize();})->save($uploadPath.'/thm_'.$imageName,80);
    }
    return response()->json(['success'=>$imageName]);
}

但我觉得这是一个相当hackish的方法。 难道没有更好的方式来过滤掉或支持SVG类型与整个介入/图像包?

在此先感谢进一步的信息!

Answer 1:

因此,进一步的实验和努力得到的东西与留下来干预/图像库,但没有SVG转换成任何东西,我用了以下解决方案的工作:

public function dropzoneStore(Request $request){
    $image = $request->file('file');
    $imageName = date("dHis-").preg_replace("/[^a-zA-Z0-9.]/","",$image->getClientOriginalName());
    $uploadPath = public_path('up/').date("Y/m");
    $image->move($uploadPath,$imageName);
    //Thumbnail Creation
    $thumbPath = $uploadPath.'/thumbs/';
    File::isDirectory($thumbPath) or File::makeDirectory($thumbPath,0775,true,true);
    if($image->getClientOriginalExtension() != 'svg'){
        $imageThmb = Image::make($uploadPath.'/'.$imageName);
        $imageThmb->fit(300,300,function($constraint){$constraint->upsize();})->save($uploadPath.'/thumbs/thm_'.$imageName,80);
    }else{
        File::copy($uploadPath.'/'.$imageName,$uploadPath.'/thumbs/thm_'.$imageName);
    }
    return response()->json(['success'=>$imageName]);
}

这虽然有点牵强,并在我的眼前哈克的方法,仍然似乎这样的伎俩与需要为每个图像的拇指我的文件系统一起工作。

虽然我可能会考虑它反正当我进一步扩大使用我的网站的最终做了SVG图像转换为缩略图。 但到目前为止,这将做和.SVG的是不是还用于网站开发,我可以放心,以及在负载方面。

无论哪种方式,我感谢大家谁试图帮助我这件事!



文章来源: Unable to read image from file .SVG (intervention/image)