用 PHP 玩转图片:缩放、裁剪、水印、滤镜一扫而空 [复制链接]
发表于 2026-1-31 13:26:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
用 PHP 玩转图片:缩放、裁剪、水印、滤镜一扫而空

提到 PHP 和图像,你会想到什么?大概是上传一张图片到网站,然后收工。但 PHP 可不光是个上传工具——它在图像处置处罚方面藏着不少本领。
图片太大放不下网页?须要裁掉配景里谁人乱入的路人?PHP 都能搞定。无论是缩放、裁剪、加水印,还是像 Instagram 那样加滤镜,PHP 都能胜任。
这篇文章会带你相识 PHP 图像处置处罚的更多玩法。我们会深入 GD 库,趁便聊聊 Imagick。
GD 和 Imagick:两大图像处置处罚库

在动手之前,先先容两个焦点工具:GD 库和 Imagick。
GD 库:稳固可靠的老店员

PHP 内置的 GD 库是个经典选择,适当处置处罚底子的图像操纵:缩放、裁剪、添加笔墨。它默认就在 PHP 里,不消额外安装。固然不是最炫的,但够用、稳固。
Imagick:功能更强的新选择

Imagick 是另一个图像处置处罚库,功能更强大。它善于处理矢量图、应用殊效、支持更多格式。如果你须要做复杂的图像处置处罚,Imagick 是更好的选择。不外本文紧张用 GD 库来演示。
底子:图像上传

在处置处罚图像之前,得先把它上传到服务器。下面是一个底子的上传脚本:
  1. if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['image'])) {
  2.     $image = $_FILES['image'];
  3.     $uploadDir = 'uploads/';
  4.     $uploadFile = $uploadDir . basename($image['name']);
  5.    
  6.     if (move_uploaded_file($image['tmp_name'], $uploadFile)) {
  7.         echo 'Image uploaded successfully!';
  8.     } else {
  9.         echo 'Failed to upload image.';
  10.     }
  11. }
复制代码
这段代码把上传的图片移动到指定目次,接下来就可以开始处置处罚了。
使用 GD 库处置处罚图像

上传搞定了,现在进入正题——图像处置处罚。
缩放图像

图片太大会拖慢页面加载速率。用 GD 库可以轻松缩放:
  1. function resizeImage($source, $target, $width, $height) {
  2.     list($originalWidth, $originalHeight) = getimagesize($source);
  3.     $image = imagecreatefromjpeg($source);
  4.    
  5.     $newImage = imagecreatetruecolor($width, $height);
  6.     imagecopyresized($newImage, $image, 0, 0, 0, 0, $width, $height, $originalWidth, $originalHeight);
  7.    
  8.     imagejpeg($newImage, $target);
  9.     imagedestroy($image);
  10.     imagedestroy($newImage);
  11. }
复制代码
这个函数把图像缩放到指定的宽高,适当在展示前调解图片尺寸。
裁剪图像

须要裁掉图片的某个地域?用 imagecrop() 函数:
  1. function cropImage($source, $target, $x, $y, $width, $height) {
  2.     list($originalWidth, $originalHeight) = getimagesize($source);
  3.     $image = imagecreatefromjpeg($source);
  4.    
  5.     $croppedImage = imagecrop($image, ['x' => $x, 'y' => $y, 'width' => $width, 'height' => $height]);
  6.    
  7.     if ($croppedImage !== FALSE) {
  8.         imagejpeg($croppedImage, $target);
  9.         imagedestroy($croppedImage);
  10.     }
  11.     imagedestroy($image);
  12. }
复制代码
指定裁剪地域的坐标和尺寸,PHP 会帮你完成剩下的工作。
添加水印

如果你运营一个答应用户上传图片的网站,给图片加水印可以防止盗用。下面是添加水印的方法:
  1. function addWatermark($imagePath, $watermarkPath, $targetPath) {
  2.     $image = imagecreatefromjpeg($imagePath);
  3.     $watermark = imagecreatefrompng($watermarkPath);
  4.    
  5.     $imageWidth = imagesx($image);
  6.     $imageHeight = imagesy($image);
  7.     $watermarkWidth = imagesx($watermark);
  8.     $watermarkHeight = imagesy($watermark);
  9.    
  10.     // 水印放在右下角
  11.     $destX = $imageWidth - $watermarkWidth - 10;
  12.     $destY = $imageHeight - $watermarkHeight - 10;
  13.    
  14.     imagecopy($image, $watermark, $destX, $destY, 0, 0, $watermarkWidth, $watermarkHeight);
  15.    
  16.     imagejpeg($image, $targetPath);
  17.     imagedestroy($image);
  18.     imagedestroy($watermark);
  19. }
复制代码
这个函数把 PNG 格式的水印叠加到图片右下角。
进阶:滤镜和缩略图

把握了底子操纵,来看看更高级的玩法。
应用滤镜

GD 库支持给图像添加滤镜。比如把图片转成灰度:
  1. function applyGrayscale($imagePath, $targetPath) {
  2.     $image = imagecreatefromjpeg($imagePath);
  3.    
  4.     imagefilter($image, IMG_FILTER_GRAYSCALE);
  5.    
  6.     imagejpeg($image, $targetPath);
  7.     imagedestroy($image);
  8. }
复制代码
除了灰度,还可以调解亮度、对比度,以致做像素化效果。
天生缩略图

在图片库或商品列表中,缩略图是必不可少的。下面是天生缩略图的函数:
  1. function createThumbnail($source, $target, $thumbWidth) {
  2.     list($originalWidth, $originalHeight) = getimagesize($source);
  3.     $thumbHeight = ($thumbWidth / $originalWidth) * $originalHeight;
  4.    
  5.     $image = imagecreatefromjpeg($source);
  6.     $thumb = imagecreatetruecolor($thumbWidth, $thumbHeight);
  7.    
  8.     imagecopyresized($thumb, $image, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $originalWidth, $originalHeight);
  9.    
  10.     imagejpeg($thumb, $target);
  11.     imagedestroy($image);
  12.     imagedestroy($thumb);
  13. }
复制代码
这个函数按指定宽度天生缩略图,同时保持原图的宽高比。
常见标题排查

图像处置处罚偶然会遇到一些标题,这里列出几个常见的。
图像粉碎

如果 PHP 无法准确处置处罚图像文件,大概会导致粉碎。处置处罚前先用 getimagesize() 验证文件是否为有用图像,同时确认文件格式(JPEG、PNG、GIF)。
内存不敷

处置处罚大图片时大概会遇到内存限定。可以在 php.ini 中调解 memory_limit。如果是共享主机,大概须要接洽服务商提拔配额。
总结

PHP 的图像处置处罚本领远不止上传那么简朴。借助 GD 和 Imagick,你可以完成缩放、裁剪、加水印、应用滤镜等操纵。无论是搭建图片库、处置处罚用户上传的内容,还是优化网站图片,这些技能都能派上用场。
用 PHP 玩转图片:缩放、裁剪、水印、滤镜一扫而空

免责声明:如果侵犯了您的权益,请联系站长及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金.
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表