PHP实现图片处理最常用的方案是借助内置的GD库扩展,该扩展提供了丰富的图片操作函数,能够完成图片创建、读取、修改、输出等一系列操作,满足绝大多数常规项目的图片处理需求。下面我们结合具体场景和实现代码,逐步讲解不同图片处理功能的实现方式。

环境准备
首先确认当前PHP环境已经开启GD库扩展,可以通过phpinfo()函数查看扩展状态,如果没有开启,需要在php.ini配置文件中取消extension=gd的注释,重启服务即可生效。
常见图片处理功能实现
1. 图片缩放
图片缩放是图片处理中最常见的需求,我们可以通过imagecreatefromjpeg等函数读取原图,再用imagecopyresampled函数实现高质量缩放,最后输出或保存图片。
<?php // 原图路径 $srcPath = 'test.jpg'; // 目标缩放宽度 $dstWidth = 300; // 目标缩放高度 $dstHeight = 200; // 根据图片类型读取原图,这里以jpg为例,其他格式可替换为imagecreatefrompng、imagecreatefromgif $srcImg = imagecreatefromjpeg($srcPath); // 获取原图宽度和高度 $srcWidth = imagesx($srcImg); $srcHeight = imagesy($srcImg); // 创建目标图片画布 $dstImg = imagecreatetruecolor($dstWidth, $dstHeight); // 执行缩放操作,保持图片质量 imagecopyresampled($dstImg, $srcImg, 0, 0, 0, 0, $dstWidth, $dstHeight, $srcWidth, $srcHeight); // 保存缩放后的图片,第二个参数为保存路径,第三个参数为图片质量(0-100) imagejpeg($dstImg, 'scaled_test.jpg', 90); // 释放内存 imagedestroy($srcImg); imagedestroy($dstImg); echo '图片缩放完成'; ?>
2. 图片添加水印
给图片添加水印分为文字水印和图片水印两种,下面以文字水印为例,通过imagettftext函数将指定文字添加到图片指定位置。
<?php // 原图路径 $srcPath = 'test.jpg'; // 水印文字 $text = '示例水印'; // 字体文件路径,需要是服务器上存在的ttf字体文件 $fontPath = 'simhei.ttf'; // 字体大小 $fontSize = 20; // 字体颜色(RGB值) $color = imagecolorallocate($srcImg, 255, 255, 255); // 读取原图 $srcImg = imagecreatefromjpeg($srcPath); // 获取原图尺寸 $srcWidth = imagesx($srcImg); $srcHeight = imagesy($srcImg); // 计算文字水印的位置,这里放在右下角,距离右边和下边各20像素 $textBox = imagettfbbox($fontSize, 0, $fontPath, $text); $textWidth = $textBox[2] - $textBox[0]; $textHeight = $textBox[1] - $textBox[7]; $x = $srcWidth - $textWidth - 20; $y = $srcHeight - $textHeight - 20; // 添加文字水印 imagettftext($srcImg, $fontSize, 0, $x, $y, $color, $fontPath, $text); // 保存添加水印后的图片 imagejpeg($srcImg, 'watermark_test.jpg', 90); imagedestroy($srcImg); echo '水印添加完成'; ?>
3. 图片格式转换
借助GD库可以轻松实现不同图片格式之间的转换,只需要读取原图后,用对应格式的输出函数保存即可,比如将jpg转换为png格式。
<?php // 原jpg图片路径 $srcPath = 'test.jpg'; // 读取原图 $srcImg = imagecreatefromjpeg($srcPath); // 输出为png格式并保存 imagepng($srcImg, 'converted_test.png'); imagedestroy($srcImg); echo '图片格式转换完成'; ?>
注意事项
- 处理大尺寸图片时注意PHP的内存限制,可通过
ini_set('memory_limit', '256M')临时调整内存大小。 - 不同图片格式对应的读取和输出函数要匹配,比如png格式用
imagecreatefrompng和imagepng,gif格式用imagecreatefromgif和imagegif。 - 添加文字水印时,字体文件路径必须正确,否则会导致水印添加失败。
PHPGD库imagecreatefromjpegimagecopyresampledimagejpeg修改时间:2026-06-07 01:41:02