PHP实现的自定义图像居中裁剪函数示例【测试可用】
发布时间 - 2026-01-11 02:44:52 点击率:次本文实例讲述了PHP实现的自定义图像居中裁剪函数。分享给大家供大家参考,具体如下:

图像居中裁减的大致思路:
1.首先将图像进行缩放,使得缩放后的图像能够恰好覆盖裁减区域。(imagecopyresampled — 重采样拷贝部分图像并调整大小)
2.将缩放后的图像放置在裁减区域中间。(imagecopy — 拷贝图像的一部分)
3.裁减图像并保存。(imagejpeg | imagepng | imagegif — 输出图象到浏览器或文件)
具体代码:
//==================缩放裁剪函数====================
/**
* 居中裁剪图片
* @param string $source [原图路径]
* @param int $width [设置宽度]
* @param int $height [设置高度]
* @param string $target [目标路径]
* @return bool [裁剪结果]
*/
function image_center_crop($source, $width, $height, $target)
{
if (!file_exists($source)) return false;
/* 根据类型载入图像 */
switch (exif_imagetype($source)) {
case IMAGETYPE_JPEG:
$image = imagecreatefromjpeg($source);
break;
case IMAGETYPE_PNG:
$image = imagecreatefrompng($source);
break;
case IMAGETYPE_GIF:
$image = imagecreatefromgif($source);
break;
}
if (!isset($image)) return false;
/* 获取图像尺寸信息 */
$target_w = $width;
$target_h = $height;
$source_w = imagesx($image);
$source_h = imagesy($image);
/* 计算裁剪宽度和高度 */
$judge = (($source_w / $source_h) > ($target_w / $target_h));
$resize_w = $judge ? ($source_w * $target_h) / $source_h : $target_w;
$resize_h = !$judge ? ($source_h * $target_w) / $source_w : $target_h;
$start_x = $judge ? ($resize_w - $target_w) / 2 : 0;
$start_y = !$judge ? ($resize_h - $target_h) / 2 : 0;
/* 绘制居中缩放图像 */
$resize_img = imagecreatetruecolor($resize_w, $resize_h);
imagecopyresampled($resize_img, $image, 0, 0, 0, 0, $resize_w, $resize_h, $source_w, $source_h);
$target_img = imagecreatetruecolor($target_w, $target_h);
imagecopy($target_img, $resize_img, 0, 0, $start_x, $start_y, $resize_w, $resize_h);
/* 将图片保存至文件 */
if (!file_exists(dirname($target))) mkdir(dirname($target), 0777, true);
switch (exif_imagetype($source)) {
case IMAGETYPE_JPEG:
imagejpeg($target_img, $target);
break;
case IMAGETYPE_PNG:
imagepng($target_img, $target);
break;
case IMAGETYPE_GIF:
imagegif($target_img, $target);
break;
}
// return boolval(file_exists($target));//PHP5.5以上可用boolval()函数获取返回的布尔值
return file_exists($target)?true:false;//兼容低版本PHP写法
}
//==================函数使用方式====================
// 原始图片的路径
$source = '../source/img/middle.jpg';
$width = 480; // 裁剪后的宽度
$height = 480;// 裁剪后的高度
// 裁剪后的图片存放目录
$target = '../source/temp/resize.jpg';
// 裁剪后保存到目标文件夹
if (image_center_crop($source, $width, $height, $target)) {
echo "原图1440*900为:<img src='$source'>";
echo "<hr>";
echo "修改后图片480*480为:<img src='$target'>";
}
运行效果:
原图1440*900为:
修改后图片480*480为:
同理,480*320,、800*600等尺寸的图片只需修改相应参数即可。
附:代码测试中遇到的问题
报错:call an undefined function exif_imagetype()
解决方法:
打开扩展 extension=php_exif.dll
并将extension=php_mbstring.dll ,放到extension=php_exif.dll前边
另:boolval()函数为PHP5.5版本以上才能使用的函数,本文测试代码中为兼容低版本,使用如下语句代替:
return file_exists($target)?true:false;
PS:这里再为大家推荐几款相关的图片在线工具供大家参考使用:
在线图片格式转换(jpg/bmp/gif/png)工具:
http://tools./aideddesign/picext
在线PS图像处理工具:
http://tools./aideddesign/webps
ICO图标在线生成工具:
http://tools./aideddesign/ico_img
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《PHP网络编程技巧总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》及《PHP基本语法入门教程》
希望本文所述对大家PHP程序设计有所帮助。
# PHP
# 自定义
# 图像
# 居中
# 裁剪
# 函数
# 自定义函数
# thinkPHP框架实现图像裁剪、缩放、加水印的方法
# PHP图像裁剪缩略裁切类源码及使用方法
# PHP图片裁剪函数(保持图像不变形)
# php+js实现图片的上传、裁剪、预览、提交示例
# php使用imagick模块实现图片缩放、裁剪、压缩示例
# 使用gd库实现php服务端图片裁剪和生成缩略图功能分享
# PHP 裁剪图片成固定大小代码方法
# PHP图片处理之使用imagecopyresampled函数裁剪图片例子
# PHP加Nginx实现动态裁剪图片方案
# PHP实现图片裁剪、添加水印效果代码
# php结合imgareaselect实现图片裁剪
# JQuery PHP图片在线裁剪实例
# 程序设计
# 相关内容
# 只需
# 感兴趣
# 给大家
# 并将
# 报错
# 更多关于
# 解决方法
# 所述
# 图像处理
# 几款
# 中为
# 面向对象
# 再为
# 格式转换
# 并保存
# 操作技巧
# 编程技巧
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何快速查询网站的真实建站时间?
Laravel如何自定义错误页面(404, 500)?(代码示例)
C++时间戳转换成日期时间的步骤和示例代码
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
Android滚轮选择时间控件使用详解
教学论文网站制作软件有哪些,写论文用什么软件
?
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
百度浏览器如何管理插件 百度浏览器插件管理方法
Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
如何利用DOS批处理实现定时关机操作详解
如何在景安服务器上快速搭建个人网站?
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
制作公司内部网站有哪些,内网如何建网站?
🚀拖拽式CMS建站能否实现高效与个性化并存?
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
网站制作壁纸教程视频,电脑壁纸网站?
linux top下的 minerd 木马清除方法
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
Laravel如何使用模型观察者?(Observer代码示例)
如何在IIS7上新建站点并设置安全权限?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
浅谈redis在项目中的应用
装修招标网站设计制作流程,装修招标流程?
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
EditPlus中的正则表达式实战(6)
如何在阿里云完成域名注册与建站?
如何用腾讯建站主机快速创建免费网站?
EditPlus中的正则表达式 实战(2)
Laravel如何使用Service Container和依赖注入?(代码示例)
如何快速辨别茅台真假?关键步骤解析
如何挑选高效建站主机与优质域名?
Laravel怎么使用artisan命令缓存配置和视图
如何将凡科建站内容保存为本地文件?
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
如何用已有域名快速搭建网站?
Mybatis 中的insertOrUpdate操作
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
Python正则表达式进阶教程_复杂匹配与分组替换解析
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】

