前言
Laravel 通过Image 门面提供了流畅的图像处理 API。可以在整个框架中以一致的表达方式编写调整大小、裁剪、编码、保存等操作。
内部使用 Intervention Image,同时支持 PHP 的 GD 扩展和 Imagick 扩展。
该功能可在 Laravel v13.20.0 及以上使用。若使用的是旧版本,请通过
composer update 将框架更新到最新版。安装
在使用图像处理功能之前,先通过 Composer 安装 Intervention Image 包。配置
配置文件位于config/image.php。若不存在配置文件,可通过 Artisan 命令发布。
IMAGE_DRIVER 中指定。支持的驱动有 gd 和 imagick。
图像的加载
Image 门面提供了从多种来源创建图像实例的方法。图像内容采用延迟加载,只在有处理请求或需要字节序列时才实际加载。
上传文件
要获取请求中上传的图像,使用image 方法。若文件不存在会返回 null。
UploadedFile 实例创建,使用 fromUpload 方法。
file 方法获取原始文件。
存储文件
要从存储在文件系统磁盘中的文件创建图像实例,使用fromStorage 方法。第一个参数是文件路径,第二个参数是磁盘名。
image 方法创建。
其他来源
也可以从字节序列、本地路径、URL、Base64 创建图像实例。图像的处理
图像实例是不可变的。每个方法都会返回一个将变换追加到处理管道中的新实例,因此可以链式调用。变换按照添加到管道的顺序处理,编码仅在最后进行一次。尺寸调整
其他变换
条件变换
图像实例支持Conditionable trait,可通过 when / unless 进行条件式变换。
编码
默认按原始格式编码。要转换格式,使用以下方法。quality 方法可设置输出质量(1~100)。
optimize 方法是格式转换与质量设定的快捷方式。默认为 WebP、质量 70。
保存
使用store 方法将图像保存到文件系统磁盘。Laravel 会自动生成唯一的文件名,并返回保存路径。
storeAs。
public 可见性保存,使用 storePublicly / storePubliclyAs。
false。
图像信息的获取
通过mimeType、extension、dimensions、width、height 方法可以获取图像信息。这些方法针对的是处理后的图像(例如在 cover(400, 400) 之后调用 width() 会返回 400)。
自定义驱动
Laravel 的图像管理器继承自Illuminate\Support\Manager,可以通过 extend 方法注册自定义驱动。
自定义驱动需实现 Illuminate\Contracts\Image\Driver 接口,process 方法接收原始图像字节序列和管道,返回处理后的图像字节序列。
boot 方法中注册。
using 方法。
自定义变换
可以通过实现Illuminate\Contracts\Image\Transformation 接口的类来定义自定义变换。
boot 方法中注册处理器。
transform 方法应用。