php裁剪图片(支持定点裁剪)
/**
* 图片裁剪函数,支持指定定点裁剪和方位裁剪两种裁剪模式
* @param <string> $src_file 原图片路径
* @param <int> $new_width 裁剪后图片宽度(当宽度超过原图片宽度时,去原图片宽度)
* @param <int> $new_height 裁剪后图片高度(当宽度超过原图片宽度时,去原图片高度)
* @param <int> $type 裁剪方式,1-方位模式裁剪;0-定点模式裁剪。
* @param <int> $pos 方位模式裁剪时的起始方位(当选定点模式裁剪时,此参数不起作用)
* 1为顶端居左,2为顶端居中,3为顶端居右;
* 4为中部居左,5为中部居中,6为中部居右;
* 7为底端居左,8为底端居中,9为底端居右;
* @param <int> $start_x 起始位置X (当选定方位模式裁剪时,此参数不起作用)
* @param <int> $start_y 起始位置Y(当选定方位模式裁剪时,此参数不起作用)
* @return <string> 裁剪图片存储路径
*/
function thumb($src_file, $new_width, $new_height, $type = 1, $pos = 5, $start_x = 0, $start_y = 0) {
$pathinfo = pathinfo($src_file);
$dst_file = $pathinfo['dirname'] . '/' . $pathinfo['filename'] .'_'. $new_width . 'x' . $new_height . '.' . $pathinfo['extension'];
if (!file_exists($dst_file)) {
if ($new_width < 1 || $new_height < 1) {
echo "params width or height error !";
return ;
//exit();
}
if (!file_exists($src_file)) {
echo $src_file . " is not exists !";
return ;
// exit();
}
$img_type=pathinfo($src_file, PATHINFO_EXTENSION);
$img_type=strtolower($img_type);
/* 载入图像 */
switch ($img_type) {
case 'jpg':
if(@!($src_img= imagecreatefromjpeg($src_file))){
if(@!($src_img = imagecreatefrompng($src_file))){
$src_img = imagecreatefromgif($src_file);
}
}
break;
case 'png':
if(@!($src_img= imagecreatefrompng($src_file))){
if(@!($src_img = imagecreatefromjpeg($src_file))){
$src_img = imagecreatefromgif($src_file);
}
}
break;
case 'gif':
if(@!($src_img= imagecreatefromgif($src_file))){
if(@!($src_img = imagecreatefrompng($src_file))){
$src_img = imagecreatefromjpeg($src_file);
}
}
break;
default:
echo "载入图像错误!";
return ;
//exit();
}
/* 获取源图片的宽度和高度 */
$src_width = imagesx($src_img);
$src_height = imagesy($src_img);
/* 计算剪切图片的宽度和高度 */
$mid_width = ($src_width < $new_width) ? $src_width : $new_width;
$mid_height = ($src_height < $new_height) ? $src_height : $new_height;
/* 初始化源图片剪切裁剪的起始位置坐标 */
switch ($pos * $type) {
case 1://1为顶端居左
$start_x = 0;
$start_y = 0;
break;
case 2://2为顶端居中
$start_x = ($src_width - $mid_width) / 2;
$start_y = 0;
break;
case 3://3为顶端居右
$start_x = $src_width - $mid_width;
$start_y = 0;
break;
case 4://4为中部居左
$start_x = 0;
$start_y = ($src_height - $mid_height) / 2;
break;
case 5://5为中部居中
$start_x = ($src_width - $mid_width) / 2;
$start_y = ($src_height - $mid_height) / 2;
break;
case 6://6为中部居右
$start_x = $src_width - $mid_width;
$start_y = ($src_height - $mid_height) / 2;
break;
case 7://7为底端居左
$start_x = 0;
$start_y = $src_height - $mid_height;
break;
case 8://8为底端居中
$start_x = ($src_width - $mid_width) / 2;
$start_y = $src_height - $mid_height;
break;
case 9://9为底端居右
$start_x = $src_width - $mid_width;
$start_y = $src_height - $mid_height;
break;
default://随机
break;
}
// 为剪切图像创建背景画板
$mid_img = imagecreatetruecolor($mid_width, $mid_height);
//拷贝剪切的图像数据到画板,生成剪切图像
imagecopy($mid_img, $src_img, 0, 0, $start_x, $start_y, $mid_width, $mid_height);
// 为裁剪图像创建背景画板
$new_img = imagecreatetruecolor($new_width, $new_height);
//拷贝剪切图像到背景画板,并按比例裁剪
imagecopyresampled($new_img, $mid_img, 0, 0, 0, 0, $new_width, $new_height, $mid_width, $mid_height);
/* 按格式保存为图片 */
switch ($img_type) {
case 'jpg':
imagejpeg($new_img, $src_file, 100);
break;
case 'png':
imagepng($new_img, $src_file, 9);
break;
case 'gif':
imagegif($new_img, $src_file, 100);
break;
default:
break;
}
}
return ltrim($src_file, '.');
}
https://www.cnblogs.com/zhaizhendong/p/6742147.html
php裁剪图片(支持定点裁剪)的更多相关文章
- Java+jquery实现裁剪图片上传到服务器
大体分两步: 1.利用jquery裁剪图片,把裁剪到的几个点传入后端 2.利用前端传入的几个点,来裁剪图片 首先,用到一个jquery的插件 imgAreaSelect 实例及插件下载地址:http: ...
- iOS开发——UI进阶篇(十八)核心动画小例子,转盘(裁剪图片、自定义按钮、旋转)图片折叠、音量震动条、倒影、粒子效果
一.转盘(裁剪图片.自定义按钮.旋转) 1.裁剪图片 将一张大图片裁剪为多张 // CGImageCreateWithImageInRect:用来裁剪图片 // image:需要裁剪的图片 // re ...
- jquery photoClip支持手机端,PC端 本地裁剪图片后上传插件
支持手机,PC最好的是jquery photoClip插件,下载地址&示例:https://github.com/topoadmin/photoClip demo.html 代码: <! ...
- 支持移动端裁剪图片插件Jcrop(结合WebUploader上传)
(此教程包括前端实现图片裁剪,后端进行获取裁剪区并保存) 最近有一个需求,微信公众号上传图片,支持自定义裁剪. 以前用过一款裁剪插件cropper,很久没用了,不知道对移动端操作兼容如何,重新从网上搜 ...
- HTML5 本地裁剪图片并上传至服务器(转)
很多情况下用户上传的图片都需要经过裁剪,比如头像啊什么的.但以前实现这类需求都很复杂,往往需要先把图片上传到服务器,然后返回给用户,让用户确定裁剪坐标,发送给服务器,服务器裁剪完再返回给用户,来回需要 ...
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的 ...
- Vue中使用Cropper.js裁剪图片
Cropper.js是一款很好用的图片裁剪工具,可以对图片的尺寸.宽高比进行裁剪,满足诸如裁剪头像上传.商品图片编辑之类的需求. github: https://github.com/fengyuan ...
- jquery.cropper 裁剪图片上传
https://github.com/fengyuanchen/cropper 1.必要的文件引用: <script src="/path/to/jquery.js"> ...
- 微信小程序裁剪图片成圆形
代码地址如下:http://www.demodashi.com/demo/14453.html 前言 最近在开发小程序,产品经理提了一个需求,要求微信小程序换头像,用户剪裁图片必须是圆形,也在gith ...
随机推荐
- python学习笔记二:if语句及循环语句,断点,模块,pyc
if语句 注意:语句块中的内容要强制缩进,否则出错.IndentationError,缩进错误 所有代码,如果是顶级的,必须顶格写,前面不能有空格 if … : … elif … : … else: ...
- QOS-交换机拥塞管理
QOS-交换机拥塞管理 2018年7月7日 20:29 优先级映射: 根据信任的优先级,查找映射表,标记丢弃优先级和本地优先级 如果信任端口优先级,不同产品优先级标记方式可能不同,S3610处理过程如 ...
- linux线程篇 (二) 线程的基本操作
线程 进程 标识符 pthread_t pid_t 获取ID pthread_self() getpid() 创建 pthread_create() fork 销毁 pthread_exit() ...
- gp与 pg 查询进程
select now()-query_start as cost_time,* from pg_stat_activity where current_query not in ( '<IDLE ...
- MongoDB入门---聚合操作&管道操作符&索引的使用
经过前段时间的学习呢,我们对MongoDB有了一个大概的了解,接下来就要开始使用稍稍深入一点的东西了,首先呢,就是MongoDB中的聚合函数,跟mysql中的count等函数差不多.话不多说哈,我们先 ...
- 2017Noip普及组游记
Day0 一天都基本在休息,早上信心赛,大家都是400整. 下午一群人窝在教室里打三国杀. Day1:Before Contest 早上大约十点到了试场,在考提高组,不能进. 喝了一杯咖啡去除早起的身 ...
- 「LeetCode」0001-Two Sum(Ruby)
题意与分析 题意直接给出来了:给定一个数,返回数组中和为该数(下为\(x\))的两个数的下标. 这里有一个显然的\(O(n)\)的实现:建立一个hash表,每次读入数(记作\(p\))的时候查询has ...
- python操作符及其循环语句(非常全)
//2018.10.14 1. Windows + R可以直接进行运行cmd 2. Random.randint(a,b):产生a-b的任意一个整数,在IDLE里面运行时需要注意在前面写好调用impo ...
- 前端开发工程师 - 01.页面制作 - 第4章.CSS
第4章.CSS CSS简介 Cascading Style Sheet 层叠样式表:定义页面中的表现样式 history: CSS1(1996)--CSS2(1998)--着手CSS3草案(拆分成很多 ...
- 关于Python 中的 if 语句
学习Python,最开始我们都是先从函数学起,Python教程中有很多函数,if算是其中之一. 可能最为人所熟知的编程语句就是 if 语句了.例如: >>> >>> ...