【发布时间】:2015-06-15 22:46:12
【问题描述】:
我制作了一个网络应用程序,上传的照片存储在 /app/storage 中。
为了显示文件,我正在使用路由 ex: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')) }}
问题:某些文件超过 2 MB,当我列出它们时,它们的加载速度非常慢,所以在列表中我只想显示照片的缩略图。 可以创建一个不会存储在任何地方的临时拇指吗? 或者每次加载页面时创建一个临时拇指不是一个好主意。 提前谢谢你。
【问题讨论】:
-
你的想法从来都不是一个好的做法。最好的做法是在保存图像时尝试创建两个图像原始和拇指。并且拇指图像路径将存储在databsae上。显示该拇指图像并提供单击选项或当他单击拇指时将显示原始图像的选项。
-
感谢您的评论,但如果我想要 getThumb($width, $height) 之类的函数:那么我可以获得不同大小的原始图像的拇指吗?
-
尝试以相同的高度和宽度调整它们的大小。如果在显示时也没有发生,请定义它们的高度和宽度,以便它们看起来大小相似。
-
当然,您可以创建一个临时缩略图。上传照片时这样做通常很好,因为这意味着您在加载页面时不必进行额外的处理。但是,如果您想在加载页面时这样做,您可以创建一个缩略图然后缓存它。后续请求应加载缓存的缩略图。处理图像处理时与 Laravel 一起使用的一个很好的包是 Intervention Image:image.intervention.io
标签: php image laravel laravel-4 laravel-routing