我制作了一个网络应用程序,上传的照片存储在/app/storage中。要显示我正在使用的文件,例如:showphoto/{id}
(路径存储在DB中)
public function showphoto($id){
$photo = Photo::findOrFail($id);
return $this->getFile($photo);
}
private function getFile($f){
if($f->path){
$file = storage_path($f->path.'/'.$f->origin_name);
if (File::exists($file)) {
$contents = File::get($file);
switch($f->ext) {
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpeg"; break;
case "pdf": $ctype="application/pdf"; break;
default:
}
$response = Response::make($contents, 200);
$response->header('Content-Type', $ctype);
return $response;
}
}
}
为了显示我正在使用的图像
{{ HTML::image(route('showphoto', $photo->id), $photo->getName(), array('class'=>'img-thumbnail', 'width' => '100', 'height'=>'100')) }}
问题:有些文件超过2MB,当我有一个列表时,它们的加载速度非常慢,所以在列表上我只想显示照片的缩略图。是否可以创建一个不会存储在任何地方的临时拇指?或者,每次加载页面时创建一个临时拇指不是一个好主意。提前谢谢。
如果你有一堆大图像,在加载页面时要以某种方式进行处理,你可能会遇到麻烦。所有这些额外的处理将真正减缓一切。
你可以做的是为上传的图像创建一个缩略图,并将其存储在某个地方。这样,您只需要加载缩略图,而不需要加载较大的图像。
或者,如果您希望能够在页面中指定缩略图的大小,另一种解决方案可以是在页面加载时以指定的大小生成缩略图。你需要确保你缓存了这些缩略图,这样你就可以使用,只需加载它们。如果你选择这种方法,第一次加载页面可能需要一段时间,但在那之后,后续的页面加载会更快,因为它将使用预先创建的缓存图像。
在操作图像时,与Laravel一起使用的一个很棒的包是Intervention Image:
http://image.intervention.io/