superbig/craft-imagerpretransform

此包已被弃用且不再维护。未建议替代包。

使用 Imager 在保存时预转换任何资产

安装数: 11,400

依赖: 0

建议者: 0

安全: 0

星星: 22

观察者: 2

分支: 1

开放问题: 1

类型:craft-plugin

2.0.3 2019-11-27 20:57 UTC

This package is auto-updated.

Last update: 2024-05-15 21:24:29 UTC


README

使用 Imager 在保存时预转换任何资产

Screenshot

要求

此插件需要 Craft CMS 3.0.0-beta.23 或更高版本。

安装

要安装插件,请按照以下说明操作。

  1. 打开您的终端并转到您的 Craft 项目

     cd /path/to/project
    
  2. 然后告诉 Composer 加载插件

     composer require superbig/craft-imagerpretransform
    
  3. 在控制面板中,转到设置 → 插件,并点击 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 模板将传递变量 assetpretransform。如果您需要以某种方式有条件地进行转换,您可以检查 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 提供