guizoxxv / laravel-multi-size-image
Laravel 包,用于优化和存储不同尺寸的图片,以便根据屏幕尺寸加载合适的图片。
Requires
- intervention/image: ^2.5
- spatie/image-optimizer: ^1.2
This package is not auto-updated.
Last update: 2024-09-16 07:13:19 UTC
README
Laravel 包,用于优化和存储不同尺寸的图片,以便根据屏幕尺寸加载合适的图片。
要求
- 为了调整图片大小,此包使用了 Intervention 库,该库需要像 GD 或 ImageMagick 这样的图像库。
- 为了优化图片,此包使用了 image-optimizer 包,该包需要系统中存在 优化器。
安装
通过 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
。
此包配置为优化
jpeg
和png
图片。请参阅 优化 部分,了解如何优化其他 MIME 类型的图片。
2.2. 输出路径
默认行为是在原始图片的同一路径下创建调整大小的图片版本。要将图片发送到不同的位置,可以提供输出路径作为第二个可选参数。
$multiSizeImage->processImage($filePath, $outputPath, $basePath);
可以使用 basePath
可选参数来保持原始文件路径为此路径。
2.3. 调整大小
可调整大小的值由 config/multiSizeImage.php
文件中的 sizes
数组定义。此数组具有作为尺寸标识符的键,以及作为要调整大小的图片大小的值。
'sizes' => [ 'tb' => 150, 'sm' => 300, 'lg' => 1024, ]
上面是默认值。在调整大小时考虑最大尺寸,并保持宽高比。将使用自动生成的名称作为新文件名。尺寸标识符用作文件名的后缀,以区分将要加载的图片。
示例
如果使用一个 2000x1000px(宽 x 高)的图片,将生成以下文件
- 5f4bc74348ccb@lg.png (1024x512px)
- 5f4bc7431e3ac@sm.png (300x150px)
- 5f4bc742eb1e3@tb.png (150x75px)
如果图片的宽度和高度低于指定的调整大小值,则不会调整图片大小,新文件将生成而不带后缀。
示例
如果使用一个 100x200px(宽 x 高)的图片,将生成以下文件
- 5f4bd0444e9dd.png (100x200px)
- 5f4bd0444e9dd@tb.png (75x150px)
2.4. 文件名
如果您想保留原始文件名而不是使用自动生成的文件名,请在 config/multiSizeImage.php
文件中将 keep_original_name
设置为 true
。
您还可以将自定义名称作为 processImage
方法的第四个参数提供。
$multiSizeImage->processImage($filePath, $outputPath, $basePath, $fileName);
2.5. 优化
默认情况下,新生成的图像也使用 image-optimizer 包和 JpegOptim、Optipng 和 Pngquant 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. 渲染
根据屏幕大小渲染图像文件。
请记住,如果图像名称没有后缀,请提供回退方案。