在Laravel的屏幕上显示时,在运行时制作图像缩略图

时间:2017-11-09 10:10:56

标签: laravel-5 thumbnails

我在Laravel进行图像转换。我想要的是当页面加载图像显示在屏幕上将转换为缩略图并显示在屏幕上。现在我能够在屏幕上显示未转换为缩略图的图像,因此如果我加载页面,则在屏幕上显示图像需要花费太多时间。我希望有人能帮助我。

1 个答案:

答案 0 :(得分:0)

我在Laravel 5中使用了Imagine库。 如果您想在飞行中创建图像缩略图,请执行此操作。

  1. 通过https://github.com/orchestral/imagine
  2. 整合此库
  3. 将web.php上的路线添加到此Route::get('/images1/{file}', 'ImageController@getImage');
  4. 创建一个Image控制器ImageController.php并粘贴到代码下面。

    <?php
    

    命名空间App \ Http \ Controllers; 使用Illuminate \ Foundation \ Bus \ DispatchesJobs; 使用Illuminate \ Routing \ Controller作为BaseController; 使用Illuminate \ Foundation \ Validation \ ValidatesRequests; 使用Illuminate \ Foundation \ Auth \ Access \ AuthorizesRequests; 使用Illuminate \ Support \ Facades \ File; 使用Illuminate \ Support \ Facades \ Config; 使用Session; 使用View; 使用路线; 使用Response;

    class ImageController扩展了BaseController {

    受保护$ imag;

    public function getImage($ filename){

    //if (!$this->imagine) {
    //    if (!$this->library and  class_exists('Imagick')) {
    //        $this->imagine = new \Imagine\Imagick\Imagine();
    //    } else {
    //        $this->imagine = new \Imagine\Gd\Imagine();
    //    }
    //}
    $this->imagine = new \Imagine\Gd\Imagine();
    
    
    // Append the filename to the path where our images are located
    $path = "C:\\xampp\\htdocs\\Eidolon_laravel-Git\\public\\Images\\".$filename; //$filename;
    $filename1 = $filename;
    // Initialize an instance of Symfony's File class.
    // This is a dependency of Laravel so it is readily available.
    $filename = new \Symfony\Component\HttpFoundation\File\File($path);
    
    // Make a new response out of the contents of the file
    // Set the response status code to 200 OK
    $response = Response::make(
        //\File::get($path), 
        $this->resize($filename, 150,150),
        200
    );
    
    // Modify our output's header.
    // Set the content type to the mime of the file.
    // In the case of a .jpeg this would be image/jpeg
    $response->header(
        'Content-type',
        'image/jpg' //$file->getMimeType()
    );
    
    // We return our image here.
    //return view('value.pushMessages', $response);
    return $response;
    

    }

    / *

    • 调整功能。
    • @param string filename
    • @param string sizeString *
    • @return blob图片内容。 * / public function resize($ filename,$ width,$ height){

      //我们可以从配置文件中读取输出路径。 // $ outputDir = \ Config :: get('assets.images.paths.output'); $ outputDir =“C:\ xampp \ htdocs \ Eidolon_laravel-Git \ public \ Images \ Output”;

      //根据大小和文件名创建输出文件路径。 $ outputFile = $ outputDir。 $文件名;

      //如果已调整大小的文件已存在,我们将返回它。 if(\ File :: isFile($ outputFile)){     return \ File :: get($ outputFile); }

      //文件尚不存在,因此我们将调整原件大小。 // $ inputDir = \ Config :: get('assets.images.paths.input'); // $ inputFile = $ inputDir。 '/'。 $文件名;

      $ inputFile = $ filename; //从Config文件中获取所选大小的宽度和高度。 // $ sizeArr = Config :: get('assets.images.sizes。'。$ sizeString); // $ width = $ sizeArr ['width']; // $ height = $ sizeArr ['height'];

      //我们想裁剪图像,以便设置调整大小模式和大小。 $ size = new \ Imagine \ Image \ Box($ width,$ height); $ mode = \ Imagine \ Image \ ImageInterface :: THUMBNAIL_OUTBOUND;

      //如果输出目录尚不存在,请创建它。 if(!\ File :: isDirectory($ outputDir)){     \文件:: makeDirectory($ outputDir); }

      //打开文件,调整大小并保存。 $这 - &GT; imagine-&GT;开放($ INPUTFILE)      - &gt;缩略图($ size,$ mode)      - &gt; save($ outputFile,array('quality'=&gt; 90));

      //返回已调整大小的文件。 return \ File :: get($ outputFile);

    }

    / **

    • @param string $ filename
    • @return string mimetype * / public function getMimeType($ filename){

      ////制作输入文件路径。 // $ inputDir = \ Config :: get('assets.images.paths.input'); // $ inputFile = $ inputDir。 '/'。 $文件名; $ inputFile = $ filename; //使用Symfony File类获取文件mimetype。 $ file = new \ Symfony \ Component \ HttpFoundation \ File \ File($ inputFile); return $ file-&gt; getMimeType();

      } }

    &GT;

  5. 现在运行你的代码。