superbig / craft-imagerpretransform
使用 Imager 在保存时预转换任何资产
Requires
- aelvan/imager: ^2.0.0
- craftcms/cms: ^3.0.0
This package is auto-updated.
Last update: 2024-05-15 21:24:29 UTC
README
使用 Imager 在保存时预转换任何资产
要求
此插件需要 Craft CMS 3.0.0-beta.23 或更高版本。
安装
要安装插件,请按照以下说明操作。
-
打开您的终端并转到您的 Craft 项目
cd /path/to/project
-
然后告诉 Composer 加载插件
composer require superbig/craft-imagerpretransform
-
在控制面板中,转到设置 → 插件,并点击 Imager Pretransform 的“安装”按钮。
Imager Pretransform 概述
如果您在创建许多按需转换时遇到过内存或执行时间问题,您应该考虑为每张图片预生成转换。
此插件与较长的缓存持续时间结合使用,将确保转换只会生成一次,一次一个。
当用户上传资产时,将创建一个任务,该任务会使用 Imager 预生成转换。
配置 Imager Pretransform
将 vendor/superbig/craft-imagerpretransform/src/config.php
中的配置模板复制到 craft/config
作为 imager-pretransform.php
,并在那里进行更改以覆盖默认设置。
您可以为每个资产源处理设置一组转换
<?php return [ // Toggle pretransforming as needed 'enabled' => true, // This will process each image in a separate job. Perfect in combination with Async Queue. 'processImagesInJobs' => false, // Transforms - these options are passed straight to Imager 'transforms' => [ // Global transform, will be applied to all images [ 'width' => 1400, ], // Images source, with handle images 'images' => [ [ 'width' => 1400, ], [ 'width' => 600, 'jpegQuality' => 65 ], [ 'width' => 380, 'height' => 380, 'mode' => 'crop', 'position' => 'center-center', 'jpegQuality' => 65 ], 'defaults' => [ ], 'configOverrides' => [ 'resizeFilter' => 'catrom', 'instanceReuseEnabled' => true, ] ], 'anotherSourceHandle' => [ [ 'height' => 600 ] ] ] ];
或者只设置一组将在上传/保存时应用于所有资产的转换
<?php return [ 'transforms' => [ [ 'width' => 1400, ], [ 'width' => 600, 'jpegQuality' => 65 ], [ 'width' => 380, 'height' => 380, 'mode' => 'crop', 'position' => 'center-center', 'jpegQuality' => 65 ], 'defaults' => [], 'configOverrides' => [] ] ];
您还可以使用 Twig 模板来设置转换
<?php return [ 'transforms' => [ [ 'template' => '_imager-pretransform', ], ] ];
Twig 模板将传递变量 asset
和 pretransform
。如果您需要以某种方式有条件地进行转换,您可以检查 pretransform
是否已定义。
_imager-pretransform.twig:
{% set transforms = [ { width: 800 }, { width: 400, height: 400 }, ] %} {% if pretransform is defined %} {% do craft.imager.transformImage(asset, transforms) %} {% else %} {# Your normal image partial #} {% endif %}
这样您就可以将转换保存在一个地方。
您还应该将 Imager 的缓存持续时间设置为很长时间,比如 1 年
在 imager.php 中
'cacheDuration' => 31536000, // 1 year
如果您的转换设置中的任何部分依赖于特定资产的值,您可以通过传递函数而不是字符串来实现。
该函数将传递资产。
作为一个例子,这是您如何在 Craft 中使用内置的焦点选择器的方式
<?php return [ 'transforms' => [ [ 'width' => 400, 'height' => 400, 'mode' => 'croponly', 'position' => function (Asset $asset) { return $asset->getFocalPoint(); }, ], ] ];
使用 Imager Pretransform
有三种预转换图片的方法
- 在上传时自动
- 通过元素动作手动
- 控制台命令,该命令接受文件夹 ID 或卷处理程序作为参数
控制台命令
要转换卷中的资产: ./craft imager-pretransform/default/index --volume=<volumeHandle> 或 -v <volumeHandle>
要转换文件夹中的资产: ./craft imager-pretransform/default/index --folderId=<folder id>
默认情况下,命令将仅转换卷的最顶层文件夹或通过 ID 指定的文件夹。要包含所有子文件夹,请添加 --include-subfolders / -s
参数。
由 Superbig 提供