ralphschindler/laravel-magick

一个具有强大imagick灵活性的Laravel媒体库

dev-master 2022-09-21 17:57 UTC

This package is auto-updated.

Last update: 2024-09-21 22:15:10 UTC


README

描述

ralphschindler/laravel-magick 采用独特的处理媒体文件的方法。它不是将媒体文件视为模型关系,而是将它们视为模型属性。为此,媒体元数据信息存储在具有指定名称的表列(模型属性)中。此外,此库在服务图像时处理图像和媒体修改(调整大小、裁剪、背景),而不是在上传时。文件存储在Laravel支持的任何配置的文件存储类型中。

功能

  • 媒体文件跟踪在同一个表的列中
  • 通过为每种图像类型添加一个特质和方法来处理设置
  • 可以通过操作图像的URL来修改
  • 支持生成占位符
  • 当图像不在磁盘上时,支持回退到占位符(主要用于开发目的)

其他优秀库

如果您对解决图像问题的此方案不感兴趣,Spatie的MediaLibrary 是一个出色的库,它将图像视为模型关系,并具有在上传时应用的“转换”概念。

安装

首先,安装包

$ composer require ralphschindler/laravel-magick

在Laravel 5.5+中,此库将自动注册。接下来,您应该发布供应商(配置)文件

$ artisan vendor:publish --provider="LaravelMagick\MagickProvider"

现在可以使用它了。

用法

将图像附加到模型

在最简单的使用场景中,将单个图像附加到模型,首先在迁移中创建一个 json 列来处理此图像

// in a table migration
$table->json('image')->nullable();

接下来,在模型中,添加 HasMagick 特质并配置一个名为 $magick 的类属性,如下所示

use LaravelMagick\Eloquent\HasMagick;

class Post extends Model
{
    use HasMagick;

    protected $magick = [
        'path' => 'posts/{id}.{extension}',
    ];
}

将图像集合附加到模型

Magick 集合是 Media 对象的有序列表。集合本身在加水时具有从 0 开始的可索引图像。每个集合都有一个概念上的 自增 数字,它存储在集合(以及集合的序列化)中,以便 Media 对象可以利用此在路径模板中。

在最简单的使用场景中,使用与上述直接图像场景中相同的 json 列,如前所述添加 HasMagick 特质,并使用 collection 键设置为 true,如下所示

use LaravelMagick\Eloquent\HasMagick;

class Post extends Model
{
    use HasMagick;

    protected $magick = [
        'images' => [
            'path' => 'post/{id}/image-{index}.{extension}',
            'collection' => true
        ],
    ];
}

在视图中显示媒体

以下 blade 语法假设 $post 是一个具有 image 属性的类型为 Post 的模型。这将生成类似于 /magick/post/11/image.png 的 URL

@if($bam->image->exists)
    <img src="{{ $bam->image->url() }}" width="20" />
@endif

在生成 URL 时使用修饰符,生成的 URL 类似于 /magick/post/11/image.@size200x200@trim.png

@if($bam->image->exists)
    <img src="{{ $bam->image->url('size200x200|trim) }}" width="20" />
@endif

图像修饰符

待办事项

详细配置

以下表格描述了可用的配置选项

magick.filesystem

默认值:env('MAGICK_FILESYSTEM', 'public')

这是图像将在其路径上存储的文件系统。

magick.render.enable

默认值:true

是否启用渲染 路由 和修改功能。

magick.render.path

默认值:/magick

路由将驻留的路径前缀,并从中提供图像。

magick.render.placeholder.enable

默认值:env('MAGICK_RENDER_PLACEHOLDER_ENABLE', false)

对于开发目的非常有用,考虑在本地启用。

magick.render.placeholder.filename

默认值:_placeholder_

这标识了请求的是占位符图像。

magick.render.placeholder.use_for_missing_files

默认值 env('MAGICK_RENDER_PLACEHOLDER_USE_FOR_MISSING_FILES', false)

如果请求的图片不在文件系统中,启用此功能将提供占位符而不是图片(对开发很有用)。

magick.render.caching.enable

默认值 env('MAGICK_RENDER_CACHING_ENABLE', true)

控制器是否应使用完整的请求缓存。

magick.render.caching.driver

默认值 env('MAGICK_RENDER_CACHING_DRIVER', 'disk')

将缓存存储到磁盘。

magick.render.caching.ttl

默认值 60

缓存的有效期。

magick.render.browser_cache_max_age

默认值 31536000

浏览器应缓存由此路由生成的图片的时间。

magick.force_unmodified_image_rendering

默认值 env('MAGICK_FORCE_UNMODIFIED_IMAGE_RENDERING', false)

这将允许根据图像请求中是否存在修饰符,选择性地使用动态(控制器)路由或静态路由(例如链接到存储)。

演示

一旦克隆,进入 cd demo 目录。在里面执行以下操作

composer install
artisan migrate
artisan db:seed
artisan serve

如果您想演示 Nova 的特定功能,必须首先将可下载的 nova 版本安装到 demo/nova。安装完成后,从上面脚本开始继续,然后在浏览器中访问 /nova 的示例。

待办事项

  • 支持通过更新路径部分(属性更新等)移动图像。