guizoxxv/laravel-multi-size-image

Laravel 包,用于优化和存储不同尺寸的图片,以便根据屏幕尺寸加载合适的图片。

v0.2.0 2021-05-16 14:53 UTC

This package is not auto-updated.

Last update: 2024-09-16 07:13:19 UTC


README

Laravel 包,用于优化和存储不同尺寸的图片,以便根据屏幕尺寸加载合适的图片。

schema

要求

安装

通过 Composer 安装包

$ composer require guizoxxv/laravel-multi-size-image

配置

将包配置文件发布到您的 Laravel 项目中,以更改默认行为。

$ php artisan vendor:publish --provider="Guizoxxv\LaravelMultiSizeImage\MultiSizeImageServiceProvider"

您的项目中将添加一个 config/multiSizeImage.php 文件。

用法

1. 实例化

要应用多尺寸图片,首先必须创建其实例。

use Guizoxxv\LaravelMultiSizeImage\MultiSizeImage;

...

$multiSizeImage = new MultiSizeImage();

2. 处理图片

调用 processImage 方法,将文件路径作为第一个参数传递。

$filePath = Storage::path('folder/file.png');

$multiSizeImage->processImage($filePath);

文件路径必须是绝对路径。

该方法返回一个包含生成文件完整路径的字符串数组。

2.1. MIME 类型

只有 config/multiSizeImage.php 文件中定义的 MIME 类型会被考虑。如果使用了未定义 MIME 类型的文件,则该文件将被忽略,方法返回 null

此包配置为优化 jpegpng 图片。请参阅 优化 部分,了解如何优化其他 MIME 类型的图片。

2.2. 输出路径

默认行为是在原始图片的同一路径下创建调整大小的图片版本。要将图片发送到不同的位置,可以提供输出路径作为第二个可选参数。

$multiSizeImage->processImage($filePath, $outputPath, $basePath);

可以使用 basePath 可选参数来保持原始文件路径为此路径。

2.3. 调整大小

可调整大小的值由 config/multiSizeImage.php 文件中的 sizes 数组定义。此数组具有作为尺寸标识符的键,以及作为要调整大小的图片大小的值。

'sizes' => [
    'tb' => 150,
    'sm' => 300,
    'lg' => 1024,
]

上面是默认值。在调整大小时考虑最大尺寸,并保持宽高比。将使用自动生成的名称作为新文件名。尺寸标识符用作文件名的后缀,以区分将要加载的图片。

示例

如果使用一个 2000x1000px(宽 x 高)的图片,将生成以下文件

如果图片的宽度和高度低于指定的调整大小值,则不会调整图片大小,新文件将生成而不带后缀。

示例

如果使用一个 100x200px(宽 x 高)的图片,将生成以下文件

2.4. 文件名

如果您想保留原始文件名而不是使用自动生成的文件名,请在 config/multiSizeImage.php 文件中将 keep_original_name 设置为 true

您还可以将自定义名称作为 processImage 方法的第四个参数提供。

$multiSizeImage->processImage($filePath, $outputPath, $basePath, $fileName);

2.5. 优化

默认情况下,新生成的图像也使用 image-optimizer 包和 JpegOptimOptipngPngquant 2 优化器进行优化,以下为 OptimizerChain

$optimizerChain = (new OptimizerChain)
    ->addOptimizer(new Jpegoptim([
        '-m85',
        '--strip-all',
        '--all-progressive',
    ]))
    ->addOptimizer(new Pngquant([
        '--force',
    ]))
    ->addOptimizer(new Optipng([
        '-i0',
        '-o2',
        '-quiet',
    ]));

要覆盖默认的优化行为,您可以在实例化 MultiSizeImage 时提供一个自定义的 OptimizerChain 作为参数。

use Guizoxxv\LaravelMultiSizeImage\MultiSizeImage;
use Spatie\ImageOptimizer\Optimizers\Svgo;
use Spatie\ImageOptimizer\Optimizers\Optipng;
use Spatie\ImageOptimizer\Optimizers\Gifsicle;
use Spatie\ImageOptimizer\Optimizers\Pngquant;
use Spatie\ImageOptimizer\Optimizers\Jpegoptim;
use Spatie\ImageOptimizer\Optimizers\Cwebp;

...

$optimizerChain = (new OptimizerChain)
    ->addOptimizer(new Jpegoptim([
        '-m85',
        '--strip-all',
        '--all-progressive',
    ]))
    ->addOptimizer(new Pngquant([
        '--force',
    ]))
    ->addOptimizer(new Optipng([
        '-i0',
        '-o2',
        '-quiet',
    ]))
    ->addOptimizer(new Svgo([
        '--disable=cleanupIDs',
    ]))
    ->addOptimizer(new Gifsicle([
        '-b',
        '-O3'
    ]))
    ->addOptimizer(new Cwebp([
        '-m 6',
        '-pass 10',
        '-mt',
        '-q 90',
    ]));

$multiSizeImage = new MultiSizeImage($optimizerChain);

您还可以通过在 config/multiSizeImage.php 文件中将 optimize 设置为 false 来禁用优化。

2.6. 删除原始文件

默认行为是在处理图像后删除原始图像,如果调整大小后的文件名与原始文件名不匹配(更改名称或路径)。如果您选择保留它,请在 config/multiSizeImage.php 文件中将 keep_original_file 设置为 true

3. 渲染

根据屏幕大小渲染图像文件。

请记住,如果图像名称没有后缀,请提供回退方案。