PHP使用Intervention Image图像处理

在 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扩展。常用场景包括加载图像、缩略图生成、图片水印添加和保存图像等。高级场景涉及智能裁剪、旋转与翻转操作以及链式调用。高级技巧还包括批量处理图片。

相关推荐
JSON_L2 小时前
Fastadmin后台使用validate进行表单验证
php·fastadmin
用户4130294883466 小时前
从 0 到 1 用 PHP 实现 Cron 表达式解析器(附完整源码)
php
JSON_L7 小时前
Fastadmin关联查询报错 method not exist:think\db\Query->XXX
php·fastadmin
sali-tec1 天前
C# 基于OpenCv的视觉工作流-章99-换背景
图像处理·人工智能·opencv·算法·计算机视觉
DFT计算杂谈1 天前
SCIENTIFIC REPORTS 非 van der Waals可调二维磁性材料设计平台
开发语言·php
凡尘——雨落凡尘1 天前
PHP实战复盘:高并发限流、防刷、验证码、会话安全、CSRF防护导致站点稳定性与安全加固实战
php·csrf 防护·csrf 攻击
2601_965798471 天前
Bostami Portfolio Template Review: Speed, Code & SEO Test
php
AC赳赳老秦1 天前
开源组件版本数据监控:OpenClaw 抓取公开版本信息,自动提醒更新与安全风险
前端·python·安全·开源·github·php·openclaw
漏刻有时2 天前
PHP GeoJSON转PNG地图渲染程序开发笔记、源码解读、问题复盘与整改方案
android·笔记·php
always_TT2 天前
【Python 日志记录:logging 模块入门】
开发语言·python·php