spatie/laravel-image-optimizer

优化您的Laravel应用程序中的图片

1.8.0 2024-02-29 10:55 UTC

README

Latest Version on Packagist Tests Total Downloads

此包是Laravel 6.0及以上版本的特定集成 spatie/image-optimizer。它可以通过一系列各种 图像优化工具 来优化PNG、JPG、SVG和GIF。该包将自动检测您的系统上安装了哪些优化二进制文件并使用它们。

以下是您如何使用它的方法

use ImageOptimizer;

// the image will be replaced with an optimized version which should be smaller
ImageOptimizer::optimize($pathToImage);

// if you use a second parameter the package will not modify the original
ImageOptimizer::optimize($pathToImage, $pathToOptimizedImage);

您不喜欢外观?没问题!只需从容器中解析一个配置好的 Spatie\ImageOptimizer\OptimizerChain 实例

app(Spatie\ImageOptimizer\OptimizerChain::class)->optimize($pathToImage);

该包还包含一个 中间件,可以自动优化所有请求中的图片。

您不使用Laravel?没问题!只需直接使用底层的 spatie/image-optimizer

支持我们

我们投入了大量资源来创建 一流的开放源代码包。您可以通过 购买我们的付费产品之一 来支持我们。

我们非常感谢您从您的家乡给我们寄明信片,说明您使用了哪些我们的包。您可以在 我们的联系页面 找到我们的地址。我们将发布所有收到的明信片在我们的 虚拟明信片墙 上。

安装

您可以通过composer安装此包

composer require spatie/laravel-image-optimizer

包将自动注册自己。

该包使用一系列二进制文件来优化图片。要了解如何安装它们,请参阅底层image-optimizer包的 优化工具部分 中的说明。该说明还包含有关 这些工具将如何处理您的图片 的信息。

该包包含一些合理的默认配置来优化图片。您可以通过发布配置文件来修改此配置。

php artisan vendor:publish --provider="Spatie\LaravelImageOptimizer\ImageOptimizerServiceProvider"

这是将要发布的 config/image-optimizer 文件的内容

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;

return [
    /**
     * When calling `optimize` the package will automatically determine which optimizers
     * should run for the given image.
     */
    'optimizers' => [

        Jpegoptim::class => [
            '-m85', // set maximum quality to 85%
            '--strip-all',  // this strips out all text information such as comments and EXIF data
            '--all-progressive'  // this will make sure the resulting image is a progressive one
        ],

        Pngquant::class => [
            '--force' // required parameter for this package
        ],

        Optipng::class => [
            '-i0', // this will result in a non-interlaced, progressive scanned image
            '-o2',  // this set the optimization level to two (multiple IDAT compression trials)
            '-quiet' // required parameter for this package
        ],

        Svgo::class => [
            '--disable=cleanupIDs' // disabling because it is known to cause trouble
        ],

        Gifsicle::class => [
            '-b', // required parameter for this package
            '-O3' // this produces the slowest but best results
        ],
        
        Cwebp::class => [
            '-m 6', // for the slowest compression method in order to get the best compression.
            '-pass 10', // for maximizing the amount of analysis pass.
            '-mt', // multithreading for some speed improvements.
            '-q 90', //quality factor that brings the least noticeable changes.
        ],
    ],

    /**
     * The maximum time in seconds each optimizer is allowed to run separately.
     */
    'timeout' => 60,

    /**
     * If set to `true` all output of the optimizer binaries will be appended to the default log.
     * You can also set this to a class that implements `Psr\Log\LoggerInterface`.
     */
    'log_optimizer_activity' => false,
];

如果您想自动优化上传到您应用程序中的图片,请在http内核中将 \Spatie\LaravelImageOptimizer\Middlewares\OptimizeImages::class 添加到中间件中。

// app/Http/Kernel.php
protected $middlewareAliases = [
   ...
   'optimizeImages' => \Spatie\LaravelImageOptimizer\Middlewares\OptimizeImages::class,
];

用法

您可以从容器中解析一个配置好的 Spatie\ImageOptimizer\OptimizerChain 实例

// the image will be replaced with an optimized version which should be smaller
app(Spatie\ImageOptimizer\OptimizerChain::class)->optimize($pathToImage);

// if you use a second parameter the package will not modify the original
app(Spatie\ImageOptimizer\OptimizerChain::class)->optimize($pathToImage, $pathToOptimizedImage);

使用外观

use ImageOptimizer;

// the image will be replaced with an optimized version which should be smaller
ImageOptimizer::optimize($pathToImage);

// if you use a second parameter the package will not modify the original
ImageOptimizer::optimize($pathToImage, $pathToOptimizedImage);

您不喜欢外观?没问题!只需从容器中解析一个配置好的 Spatie\ImageOptimizer\OptimizerChain 实例

app(Spatie\ImageOptimizer\OptimizerChain::class)->optimize($pathToImage);

使用中间件

所有请求到使用 optimizeImages 中间件的路由的图片都将自动优化。

Route::middleware('optimizeImages')->group(function () {
    // all images will be optimized automatically
    Route::post('upload-images', 'UploadController@index');
});

添加自己的优化器

要了解如何创建自己的优化器,请阅读底层 spatie/image-optimizer 包的“编写自定义优化器”部分。

您可以将优化器的完全限定类名作为键添加到配置文件中的optimizers数组中。

示例转换

以下是一些由优化器完成的示例转换

变更日志

有关最近更改的更多信息,请参阅变更日志

测试

composer test

贡献

有关详细信息,请参阅贡献指南

安全

如果您发现与安全相关的错误,请通过security@spatie.be发送邮件,而不是使用问题跟踪器。

Postcardware

您可以使用这个包(它是MIT许可),但如果它进入了您的生产环境,我们非常希望您能从家乡给我们寄一张明信片,说明您正在使用我们的哪个包。

我们的地址是:Spatie,Kruikstraat 22,2018 安特卫普,比利时。

我们将所有收到的明信片发布在我们的公司网站上

鸣谢

中间件优化请求中所有文件的想法来自approached/laravel-image-optimizer

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件