在 Web 开发中,图像处理是常见需求:缩略图生成、水印添加、格式转换......但原生 PHP 的 GD 库 API 复杂且易出错。本文将提供Intervention ImagePHP 图像处理库从安装到高级用法的完整实战指南,它能用极简代码完成复杂的图像操作。
目录
安装
Intervention Image 通过 Composer 安装,无需手动配置。
确保你的服务器已安装 php-gd 扩展。
Linux用sudo apt install php-gd,
Windows启用extension=gd。
bash
# 安装(需适配环境)
composer require intervention/image
注意:
Intervention Image 目前有两个主要版本。
V2 是经典款,V3 是2023年推出的重构版(支持 PHP 8.1+)。
本文是在php7.4环境,故安装的是版本2。
常用场景
加载图像
加载图像(支持 JPG/PNG/GIF/WebP)
php
$filePath = public_path('uploads/test.png');
$image = Image::make($filePath);
获取原始尺寸
php
$width = $image->width();
$height = $image->height();
缩略图
缩放:保持比例,最大尺寸 800x600
resize() 会智能处理比例,upsize() 防止缩小图片被放大
php
$image->resize(800, 600, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
});
图片水印
可以设置水印图片的透明度和位置。
php
$watermarkPath = public_path('uploads/water.png');
$watermark = Image::make($watermarkPath);
// 设置水印透明度
$watermark->opacity(50);
// 水印位置
$position = 'bottom-left';
// 插入水印
$image->insert($watermark, $position);
还可以设置x、y位置。
php
$watermark = Image::make(public_path('uploads/water.png'));
$image->insert($watermark, 'bottom-right', 10, 10);
文字水印
需要设置字体位置。
php
$fontSize = 12;
$fontColor = '#ff0000';
$fontPath = public_path('fonts/simhei.ttf');
$image->text('@水印', 100, 200, function($font) use ($fontSize, $fontColor, $fontPath) {
$font->file($fontPath);
$font->size($fontSize);
$font->color($fontColor);
});
保存图像
设置好路径,保存最后的图像。
php
$image->save(public_path('uploads/thumb.jpg'));
高级场景
缩放和裁剪
Crop在当前图像中剪切出一个给定宽度和高度的矩形部分。
生成 300x300 正方形缩略图。
php
$image->resize(300, 300, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
})->crop(300, 300);
智能裁剪
将裁剪和调整尺寸相结合,以智能的方式格式化图像。
避免缩放后变形,自动填充背景(默认白色),比 resize() 更适合头像/封面图。
position值,默认为center,还可以设置如下参数:
· top-left
· top
· top-right
· left
· center (default)
· right
· bottom-left
· bottom
· bottom-right
php
$image->fit(800, 600, null, 'center');
旋转与翻转
php
// 旋转 90 度
$image->rotate(90);
// 水平翻转(镜像)
$image->flip('h');
// 垂直翻转
$image->flip('v');
高级技巧链式操作
Intervention 的链式调用是最大亮点,避免重复创建对象;
一行代码完成:缩放 → 旋转 → 添加水印 → 保存。
php
Image::make(public_path('uploads/test.png'))
->resize(800, null) // 宽度 800,高度自适应
->rotate(15)
->insert(Image::make(public_path('uploads/water.png')), 'bottom-right', 15, 15)
->save('uploads/over.jpg');
批量处理图片
php
$images = glob(public_path('uploads/test/*.png'));
foreach ($images as $path) {
$image = Image::make($path);
$image->fit(300, 400, null, 'center');
// 取出文件后缀
$fileExtension = pathinfo($path, PATHINFO_EXTENSION);
// 生成文件名
$fileName = date('YmdHis') . uniqid() .'.'. $fileExtension;
// 确保目录存在
$targetDir = public_path('thumbs');
if (!file_exists($targetDir)) {
mkdir($targetDir, 0755, true);
}
$image->save($targetDir . '/' . $fileName);
$image->destroy(); // 释放内存
}
官方文档:https://image.intervention.io/v2
总结
使用Composer进行安装Intervention Image库。确保服务器已安装php-gd扩展。常用场景包括加载图像、缩略图生成、图片水印添加和保存图像等。高级场景涉及智能裁剪、旋转与翻转操作以及链式调用。高级技巧还包括批量处理图片。