Skip to main content

前言

Laravel 通过 Image 门面提供了流畅的图像处理 API。可以在整个框架中以一致的表达方式编写调整大小、裁剪、编码、保存等操作。 内部使用 Intervention Image,同时支持 PHP 的 GD 扩展和 Imagick 扩展。
图像处理可能会大量消耗 CPU 与内存。大规模的图像处理请勿放在 HTTP 请求中,建议作为队列任务处理。
该功能可在 Laravel v13.20.0 及以上使用。若使用的是旧版本,请通过 composer update 将框架更新到最新版。

安装

在使用图像处理功能之前,先通过 Composer 安装 Intervention Image 包。
同时,请根据所使用的驱动确认 PHP 已安装 GD 扩展或 Imagick 扩展。

配置

配置文件位于 config/image.php。若不存在配置文件,可通过 Artisan 命令发布。
默认驱动可以在配置文件或环境变量 IMAGE_DRIVER 中指定。支持的驱动有 gdimagick

图像的加载

Image 门面提供了从多种来源创建图像实例的方法。图像内容采用延迟加载,只在有处理请求或需要字节序列时才实际加载。

上传文件

要获取请求中上传的图像,使用 image 方法。若文件不存在会返回 null
若要从 UploadedFile 实例创建,使用 fromUpload 方法。
从上传文件创建的图像实例可通过 file 方法获取原始文件。

存储文件

要从存储在文件系统磁盘中的文件创建图像实例,使用 fromStorage 方法。第一个参数是文件路径,第二个参数是磁盘名。
也可以通过 Storage 门面的 image 方法创建。

其他来源

也可以从字节序列、本地路径、URL、Base64 创建图像实例。

图像的处理

图像实例是不可变的。每个方法都会返回一个将变换追加到处理管道中的新实例,因此可以链式调用。变换按照添加到管道的顺序处理,编码仅在最后进行一次。

尺寸调整

其他变换

条件变换

图像实例支持 Conditionable trait,可通过 when / unless 进行条件式变换。

编码

默认按原始格式编码。要转换格式,使用以下方法。
使用 quality 方法可设置输出质量(1~100)。
optimize 方法是格式转换与质量设定的快捷方式。默认为 WebP、质量 70。
也可以以字节序列、Base64、Data URI 形式获取。

保存

使用 store 方法将图像保存到文件系统磁盘。Laravel 会自动生成唯一的文件名,并返回保存路径。
若要指定文件名,使用 storeAs
若要以 public 可见性保存,使用 storePublicly / storePubliclyAs
若保存失败会返回 false

图像信息的获取

通过 mimeTypeextensiondimensionswidthheight 方法可以获取图像信息。这些方法针对的是处理后的图像(例如在 cover(400, 400) 之后调用 width() 会返回 400)。

自定义驱动

Laravel 的图像管理器继承自 Illuminate\Support\Manager,可以通过 extend 方法注册自定义驱动。 自定义驱动需实现 Illuminate\Contracts\Image\Driver 接口,process 方法接收原始图像字节序列和管道,返回处理后的图像字节序列。
在服务提供者的 boot 方法中注册。
若要为特定图像指定驱动,使用 using 方法。

自定义变换

可以通过实现 Illuminate\Contracts\Image\Transformation 接口的类来定义自定义变换。
在服务提供者的 boot 方法中注册处理器。
注册后可通过 transform 方法应用。
最后修改于 2026年8月2日