ralphschindler / laravel-magick
一个具有强大imagick灵活性的Laravel媒体库
Requires
- php: ^8.0
Requires (Dev)
- orchestra/testbench: ^5.0
- phpunit/phpunit: ^9.0
Suggests
- ext-imagick: Imagick image modifications
- laravel/framework: This package is intended to be used with laravel/framework version >= 5.7
Conflicts
- laravel/framework: <5.7.0
- laravel/nova: <2.0.0
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
的示例。
待办事项
- 支持通过更新路径部分(属性更新等)移动图像。