laravelista/picasso

Laravel 图片管理和优化包

资助包维护!
Patreon

0.8.1 2021-03-25 19:10 UTC

This package is auto-updated.

Last update: 2024-08-26 02:28:19 UTC


README

Picasso 是一个 Laravel 图片管理和优化包。定义图片尺寸和选项,将上传的图片存储在多个尺寸,可选添加水印,并在需要时在网站上检索优化后的图片。

Become a Patron

概述

为了减少网站大小并提高网站加载时间,此包允许您

  • 将图片缩放到多个尺寸; [宽度 x 高度,支持放大] ('news_thumbnail', 'news_gallery', 'news_cover', ...)
  • 检索特定位置优化后的图片 get('news_cover')
  • 为需要水印的图片添加水印 (进行中)
  • 快速更改图片尺寸并更新所有、子集或单个图片的优化尺寸
  • 在应用开发的任何阶段实现此包
  • 在您的整个网站或网站的任何部分使用此包
  • 设置全局或单个图片质量(默认 60
  • 设置全局或单个图片格式(默认 webp

工作原理

在配置文件中,您定义尺寸宽度、高度,(格式和质量是可选的)以及该尺寸的唯一名称。在控制器中调用 $picasso->optimize('images/image.jpg', ['home_slideshow_large', 'home_slideshow_thumbnail'])。此方法接受原始图片,根据输入的尺寸优化它,将其保存到存储中,并将记录保存到清单文件中

稍后,当您调用 Picasso::get('images/image.jpg', 'home_slideshow_large') 时,您将获得优化后的图片。

优势

您可以保持原始用户上传的图片不受影响(2MB 或更多)。此包将创建新的优化图片,并在清单文件中保留原始和优化图片的引用。

您的页面将加载更快,因为下载的 MB 更少,因为图片会更小。我通过在开发后期阶段将此包作为插件实现,成功将图片大小从 2.4MB 减少到 700Kb。

安装

从命令行

composer require laravelista/picasso

发布配置文件 picasso.php 到您的 /config 目录

php artisan vendor:publish --provider="Laravelista\Picasso\ServiceProvider" --tag=config

安装完成!

配置

在继续之前,请确保打开 /config/picasso.php 文件,并根据您的需要更新尺寸和质量。

用法

有几种方法可以将此包实现到您的应用程序中。我将尝试涵盖所有这些方法。

存储方法

在将用户上传的图片存储在您的存储中 UploadedFile $image->store('images') 并检索到图片路径后,将此路径(您通常会在数据库中存储)提供给 Picasso

use Laravelista\Picasso\Picasso;

public function store(Request $request, Picasso $picasso)
{
    // ...

    // store original image in storage
    $article->image = $request->image->store('images');

    // optimize original image to desired dimensions
    $picasso->optimize($article->image, ['news_small', 'news_cover']);

    // ...
}

更新方法

当用户要替换现有图片为新图片时,我们必须首先从存储和清单文件中清除旧图片的所有记录,然后优化新图片

use Laravelista\Picasso\Picasso;

public function update(Request $request, Article $article, Picasso $picasso)
{
    // ...

    if ($request->hasFile('image')) {

        // delete original image from storage
        Storage::delete($article->image);

        // delete all optimized images for old image
        $picasso->drop($article->image, ['news_small', 'news_cover']);

        // save new original image to storage and retrieve the path
        $article->image = $request->image->store('images');

        // optimize new original image
        $picasso->optimize($article->image, ['news_small', 'news_cover']);
    }

    // ...
}

销毁方法

当删除具有优化图片的记录时,请确保删除优化图片以减少未使用的文件

use Laravelista\Picasso\Picasso;

public function destroy(Article $article, Picasso $picasso)
{
    // ...

    // delete original image
    Storage::delete($article->image);

    // delete optimized images
    $picasso->purge($article->image);

    // delete record from database
    $article->delete();

    // ...
}

优化已上传和保存的图片

我的建议是为此创建一个控制台路由。我将向您展示我在我的应用程序中是如何做到这一点的。在 routes/console.php 和此路由

use Laravelista\Picasso\Picasso;

Artisan::command('picasso:article-optimize', function (Picasso $picasso) {

    $images = Article::all()->pluck('image')->toArray();

    $picasso->optimize($images, ['news_small', 'news_cover']);

    $this->comment("Article images optimized!");
});

现在,您可以从命令行调用 php artisan picasso:article-optimize 任何时候,它将获取表 article 的原始图片,创建优化图片,在存储中创建/更新优化图片,并更新数据库中的引用。

检索优化图片

从您的视图文件中执行

<image src="{{ Picasso::get($article->image, 'news_small') }}" />

此行将检索优化图片 URL。

API

目前,Picasso 中只有四种主要方法。

optimize(string|array $image, string|array $dimension, string $disk = null)

此方法为给定图像或图像创建所需尺寸的优化图像。

它接受图像路径数组或单个图像路径。它接受有效尺寸数组(如配置中定义),或单个尺寸。最后一个参数是保存优化图像的磁盘。

get(string $image, string $dimension, string $disk = null)

此方法检索给定原始图像路径和所需尺寸的优化图像。

最后一个参数是在该磁盘上执行此操作的磁盘。

drop(string $image, string|array $dimension, string $disk = null)

此方法删除给定图像路径和尺寸或尺寸的优化图像。

最后一个参数是在该磁盘上执行此操作的磁盘。

purge(string $image, string $disk = null)

此方法删除给定图像路径的存储中的所有优化图像。

最后一个参数是在该磁盘上执行此操作的磁盘。

开发

# Install dependencies
composer install

# Run Psalm
vendor/bin/psalm

# Format code
vendor/bin/php-cs-fixer fix

赞助商和资助者

我要向以下赞助商和资助者表示衷心的感谢,他们为我的开源之旅提供了资金。如果您有兴趣成为赞助商或资助者,请访问资助者页面

贡献

感谢您考虑为 Picasso 做出贡献!贡献指南可以在此处找到。

行为准则

为了确保开源社区对所有人均持欢迎态度,请阅读并遵守行为准则

许可

Picasso 是开源软件,采用MIT 许可证