无法从文件 .SVG 中读取图像 (intervention/image)
Unable to read image from file .SVG (intervention/image)
所以我正在制作一个图像上传器,我想在其中制作缩略图但也支持 svg,因为 GD 不支持 svg 类型我首先尝试在 config/image 中切换到 imagick。php 文件,但这并没有改变任何东西。
我不确定它是否支持它,我是否缺少必须安装的必需软件包?如果是哪一个?
但是话虽如此,当我尝试上传 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() 但它只是说图像不能 opened/read 要么。
$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]);
}
但我发现这是一种相当老套的方法。没有更好的方法来过滤掉或支持整个 intervention/image 包的 svg 类型吗?
提前感谢您提供更多信息!
因此,通过进一步的实验并尝试在 intervention/image 库中找到一些有用的东西,但不将 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 还没有用于网站开发,我在负载方面也可以放心。
无论如何,我感谢所有试图帮助我解决这个问题的人!
所以我正在制作一个图像上传器,我想在其中制作缩略图但也支持 svg,因为 GD 不支持 svg 类型我首先尝试在 config/image 中切换到 imagick。php 文件,但这并没有改变任何东西。
我不确定它是否支持它,我是否缺少必须安装的必需软件包?如果是哪一个?
但是话虽如此,当我尝试上传 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() 但它只是说图像不能 opened/read 要么。
$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]);
}
但我发现这是一种相当老套的方法。没有更好的方法来过滤掉或支持整个 intervention/image 包的 svg 类型吗?
提前感谢您提供更多信息!
因此,通过进一步的实验并尝试在 intervention/image 库中找到一些有用的东西,但不将 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 还没有用于网站开发,我在负载方面也可以放心。
无论如何,我感谢所有试图帮助我解决这个问题的人!