Laravel Spatie/Media 使用 PHP 即时生成转换

问题描述 投票:0回答:1

我正在开发一个项目,从旧应用程序中导入数十万张照片。我已经编写了全部种子脚本和一个很好的 CustomPathGenerator 来处理存储和检索那么多图像(平面目录不适用于那么多文件)。为了加快导入速度并减少磁盘空间使用,我想在导入期间禁用转换,然后在导入后重新启用它们。我有两个问题。首先,当您将媒体添加到模型时,是否有一种方法可以禁用自动转换?比如:

$myModel->addMedia($path)
     ->preservingOriginal()
     //->skipConversion() // don't do the conversion
     ->toMediaCollection('images');

其次,我希望能够即时生成转换,类似于:

$image = $myModel->getFirstMedia('images');
if( !$image->hasGeneratedConversion('thumb') ) {
 // $image->generateConversion('thumb'); // generate conversion on-the-fly
}

这是内置到 Media 类中的,还是我必须使用 Spatie/Image 包构建自己的generateConversion 方法?

使用 Spatie/Laravel-Media v8

laravel
1个回答
0
投票

查看文档,有这一部分:

重新生成图像 | laravel-媒体库 |斯帕蒂

这一切都是关于运行控制台命令,但出于我的目的,我需要在显示转换之前检查转换是否存在,以有效地“延迟加载”拇指。深入研究未记录的类,结果发现非常简单:

$fileManipulator = new \Spatie\MediaLibrary\Conversions\FileManipulator;
$media = $myModel->getMedia('images');
foreach( $media as $img ) {
  if( !$img->hasGeneratedConversion('thumb') ) {
    $fileManipulator->createDerivedFiles($img);
  }
}

这会在首次显示时产生开销,但之后应该会继续快速加载。

© www.soinside.com 2019 - 2024. All rights reserved.