如何从Laravel中的PDF上传生成缩略图

问题描述

我正在尝试生成在laravel中上传的PDF的缩略图,该缩略图应该是PDF的第一页。现在,我正在手动上传图像,以使缩略图像这样:

if (request()->has('pdf')) {
            $pdfuploaded = request()->file('pdf');
            $pdfname = $request->book_name . time() . '.' . $pdfuploaded->getClientOriginalExtension();
            $pdfpath = public_path('/uploads/pdf');
            $pdfuploaded->move($pdfpath,$pdfname);
            $book->book_file = '/uploads/pdf/' . $pdfname;
            $pdf = $book->book_file;
        }

if (request()->has('cover')) {
            $coveruploaded = request()->file('cover');
            $covername = $request->book_name . time() . '.' . $coveruploaded->getClientOriginalExtension();
            $coverpath = public_path('/uploads/cover');
            $coveruploaded->move($coverpath,$covername);
            $book->card_image = '/uploads/cover/' . $covername;
            
        }

输入许多我想自动生成缩略图的数据时,这可能很乏味。我搜索了许多答案,但找不到特定的Laravel。我尝试使用ImageMagic和Ghost脚本,但是找不到解决方案和适当的实现角色。

解决方法

对不起,还不能发表评论! 上传文件时,您可以使用spatie/pdf-to-image将首页解析为图片,并将其存储在存储器中,并将链接保存在数据库中。

首先,您需要安装和配置php-imagickghostscript。有关ghostscript安装的问题,可以参考this。然后添加软件包composer require spatie/pdf-to-image

根据您的代码示例:

if (request()->has('pdf')) {
  $pdfuploaded = request()->file('pdf');
  $pdfname = $request->book_name . time() . '.' . $pdfuploaded->getClientOriginalExtension();
  $pdfpath = public_path('/uploads/pdf');
  $pdfuploaded->move($pdfpath,$pdfname);
  $book->book_file = '/uploads/pdf/' . $pdfname;
  $pdf = $book->book_file;

  $pdfO = new Spatie\PdfToImage\Pdf($pdfpath . '/' . $pdfname);
  $thumbnailPath = public_path('/uploads/thumbnails');
  $thumbnail = $pdfO->setPage(1)
    ->setOutputFormat('png')
    ->saveImage($thumbnailPath . '/' . 'YourFileName.png');
  // This is where you save the cover path to your database.
}