【问题标题】:Laravel Image thumbLaravel 图像拇指
【发布时间】: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


【解决方案1】:

如果您在加载页面时要以某种方式处理大量大图像,您可能会遇到麻烦。所有这些额外的处理都会真正减慢一切。

您可以在上传图片时为其创建缩略图并将其存储在某处。这样,您只需加载缩略图而不是较大的图像。

或者,如果您希望能够在页面中指定缩略图的大小,另一种解决方案可能是在页面加载时以您指定的大小生成缩略图。您需要确保缓存这些缩略图,以便您可以在继续使用时加载它们。如果您在第一次加载页面时选择此方法可能需要一段时间,但在那之后,后续页面加载会更快,因为它将使用预先创建的缓存图像。

在处理图像时与 Laravel 一起使用的一个很棒的包是 Intervention Image:

http://image.intervention.io/

【讨论】:

  • 谢谢你的回答,我想如果我现在加载图像喜欢: 图像仍然加载较慢,因为它仍然是 2 mb。这就是为什么我想在显示之前调整它的大小,我尝试了 Intervation,但是在制作 response() 时它返回 Content-type 等等......它不会返回它自己的图像。
  • 没问题。图像不应该仍然是 2mb,因为您之前应该已经调整了它的大小并保存了那个较小的版本。您应该改用该图像。
猜你喜欢
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多