php - 如何在 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-imagick
并ghostscript
安装和配置。对于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.
}
推荐阅读
- python - CV2 imwrite 生成无法打开的图像
- javascript - 是否可以在不使用反应应用程序的情况下使用反应语音识别?
- c++ - 来自 Microsoft 的带有压缩 API 的示例代码中未解析的外部符号
- laravel - 在 Laravel 中使用 nwidart 包后播种数据库的问题
- javascript - Jquery 仅在向下滚动时显示 div
- reactjs - React-Redux:连接期间状态为空
- android-ndk - AMediaCodec_dequeueOutputBuffer 很慢,在一台设备上返回 -10000
- c++ - 如何在 RedHat 7 Linux 上编译用 RedHat 5 编写的 c++98 代码
- python - 如何正确使用 scipy tplquad?
- c# - Hpw 我可以将编码的代码“像 00E6' 还原为 C# 中的字符吗