如何用PHP实现图片缩放、裁剪、水印、滤镜功能?
摘要:用 PHP 玩转图片:缩放、裁剪、水印、滤镜一网打尽 提到 PHP 和图像,你会想到什么?大概是上传一张图片到网站,然后收工。但 PHP 可不只是个上传工具——它在图像处理方面藏着不少本事。 图片太大放不下网页?需要裁掉背景里那个乱入的路人
用 PHP 玩转图片:缩放、裁剪、水印、滤镜一网打尽
提到 PHP 和图像,你会想到什么?大概是上传一张图片到网站,然后收工。但 PHP 可不只是个上传工具——它在图像处理方面藏着不少本事。
图片太大放不下网页?需要裁掉背景里那个乱入的路人?PHP 都能搞定。无论是缩放、裁剪、加水印,还是像 Instagram 那样加滤镜,PHP 都能胜任。
这篇文章会带你了解 PHP 图像处理的更多玩法。我们会深入 GD 库,顺便聊聊 Imagick。
GD 和 Imagick:两大图像处理库
在动手之前,先介绍两个核心工具:GD 库和 Imagick。
GD 库:稳定可靠的老伙计
PHP 内置的 GD 库是个经典选择,适合处理基础的图像操作:缩放、裁剪、添加文字。它默认就在 PHP 里,不用额外安装。虽然不是最炫的,但够用、稳定。
Imagick:功能更强的新选择
Imagick 是另一个图像处理库,功能更强大。它擅长处理矢量图、应用特效、支持更多格式。如果你需要做复杂的图像处理,Imagick 是更好的选择。不过本文主要用 GD 库来演示。
基础:图像上传
在处理图像之前,得先把它上传到服务器。下面是一个基础的上传脚本:
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['image'])) {
$image = $_FILES['image'];
$uploadDir = 'uploads/';
$uploadFile = $uploadDir . basename($image['name']);
if (move_uploaded_file($image['tmp_name'], $uploadFile)) {
echo 'Image uploaded successfully!';
} else {
echo 'Failed to upload image.';
}
}
这段代码把上传的图片移动到指定目录,接下来就可以开始处理了。
使用 GD 库处理图像
上传搞定了,现在进入正题——图像处理。
缩放图像
图片太大会拖慢页面加载速度。用 GD 库可以轻松缩放:
function resizeImage($source, $target, $width, $height) {
list($originalWidth, $originalHeight) = getimagesize($source);
$image = imagecreatefromjpeg($source);
$newImage = imagecreatetruecolor($width, $height);
imagecopyresized($newImage, $image, 0, 0, 0, 0, $width, $height, $originalWidth, $originalHeight);
imagejpeg($newImage, $target);
imagedestroy($image);
imagedestroy($newImage);
}
这个函数把图像缩放到指定的宽高,适合在展示前调整图片尺寸。
裁剪图像
需要裁掉图片的某个区域?用 imagecrop() 函数:
function cropImage($source, $target, $x, $y, $width, $height) {
list($originalWidth, $originalHeight) = getimagesize($source);
$image = imagecreatefromjpeg($source);
$croppedImage = imagecrop($image, ['x' => $x, 'y' => $y, 'width' => $width, 'height' => $height]);
if ($croppedImage !== FALSE) {
imagejpeg($croppedImage, $target);
imagedestroy($croppedImage);
}
imagedestroy($image);
}
指定裁剪区域的坐标和尺寸,PHP 会帮你完成剩下的工作。
