laravelista / picasso
Laravel 图片管理和优化包
Requires
- php: ^8.0
- illuminate/database: ^8.0
- illuminate/filesystem: ^8.0
- illuminate/support: ^8.0
- intervention/image: ^2.5
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.18
- vimeo/psalm: ^4.6
README
Picasso 是一个 Laravel 图片管理和优化包。定义图片尺寸和选项,将上传的图片存储在多个尺寸,可选添加水印,并在需要时在网站上检索优化后的图片。
概述
为了减少网站大小并提高网站加载时间,此包允许您
- 将图片缩放到多个尺寸; [宽度 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 许可证。