我正在使用Glide从我的某个网站提供图片内容。这个工作正常,我现在已经构建了一个文件上传,以便管理员可以将图像上传到网站以供后续下载。
管理员上传的一些图片将比我需要的大得多(或者想要在服务器上存储的开销),所以我想缩小它们,最好是在上传例程中或者在它们失败之后,已保存到新位置(存储/应用/图像)
所以,由于我对getClientOriginalName / Extension等提供的文件名和路径的理解不足,我一直在干预干预,但没有太大的成功。
有没有人能告诉我一个适合这种情况的模式。理想情况下,我喜欢把我在其他人的例子中看到过的东西包括在内......
$img = Image::make('foo.jpg')->resize(300, 200);
...在我的代码中的正确位置
foreach($files as $file) {
$fileExtension = $file->getClientOriginalExtension();
$fileMimeType = $file->getMimeType();
if(in_array($fileExtension, $allowableExtensions)) {
if(in_array($fileMimeType, $allowableMimes)) {
array_push($dbFileList, $file->getClientOriginalName());
$newImage = '/images/' . $propertyCode . '/' . $file->getClientOriginalName();
Storage::put('/images/' . $propertyCode . '/' . $file->getClientOriginalName(), file_get_contents($file));
}else{
$errorMessage = 'At least one file was not an image, check your results...';
}
}else{
$errorMessage = 'At least one file was not an image, check your results...';
}
}
Storage::put('/images/' . $propertyCode . '/' . $file->getClientOriginalName(), file_get_contents($file));
$img = Image::make($file);
Storage::put('/images/new/' . $file->getClientOriginalName(), $img);
这个更新的代码将文件输出到/ new目录,所有看起来都很好,但输出文件有'零字节'。我错过了什么?
最终答案(在使用贡献者提供的正确代码之后)是:
然后这个最终的代码开始起作用了。
$path = storage_path('app/smallpics/')."/".$file->getClientOriginalName();
$img = Image::make($file)->resize(300,200)->save($path);
非常感谢你们所有人。你让我的Laravel学习曲线不那么糟糕!!
答案 0 :(得分:2)
您可以使用Intervention
来操作图像(调整大小等)
$new_image = Image::make($file)->resize(300,200)->save('/path/to/save');
答案 1 :(得分:0)
图片上传和调整工作流程如下:
tmp
上传到您的目录。 height, width, quality
制作该图像的副本,并将其保存在相同或其他目录中。根据您的代码流程:
Storage::put('/images/' . $propertyCode . '/' . $file->getClientOriginalName(), file_get_contents($file));
在此代码之后,放置图像压缩代码,然后删除原始图像。
答案 2 :(得分:0)
您可以使用Intervention或仅使用imagemagick convert command line命令进行调整大小或转换。
注意评论:
public function saveUploadPic(Request $request)
{
$pic = $request->file('<NAME_OF_FILE_INPUT_IN_HTML_FORM>');
#check for upload correctly
if(!$pic->isValid())
{
throw new Exception("IMAGE NOT UPLOADED CORRECTLY");
}
#check for mime type and extention
$ext = $pic->getClientOriginalExtension();
$mime = $pic->getMimeType();
if(!in_array($mime, $allowedMimeTypeArray) || !in_array($ext, $allowedExtArray))
{
throw new Exception("This Image Not Support");
}
#check for size
$size = $pic->getClientSize() / 1024 / 1024;
if($size > $allowedSize)
{
throw new Exception("Size Of Image Is More Than Support Size");
}
########################YOU HAVE TWO OPTION HERE###################
#1- save image in a temporary location with random hash for name if u need orginal image for other process
#below code save image in <LARAVEL_APP_PATH>/storage/app/tmp/pics/
$hash = md5(date("YmdHis").rand(1,10000));
$pic->storeAs('tmp/pics', $hash.'.'.$ext);
#Then resize or convert it
$img = Image::make(storage_path('app/tmp/pics/'.$hash.'.'.$ext))->resize(300, 200);
#save new image whatever u want
$img->save('<PATH_TO_SAVE_IMAGE>');
#after u finish with orginal image delete it
Storage::delete(storage_path('app/tmp/pics/'.$hash.'.'.$ext);
#2- Or just use below for resize and save image witout need to save in temporary location
$img = Image::make($pic->getRealPath())->resize(300,200);
$img->save('<PATH_TO_SAVE_IMAGE>');
}
如果您想使用转换,请参阅this link。