Jcrop图片裁剪+canvas+thinkphp
演示效果请看本站的个人中心头像上传
前端代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>图像裁剪-Jcrop</title>
</head>
<body>
<div class="reHeaderImg">
<!-- <form action="{:U('User/reg')}" method="post"> -->
<div class="form-group">
<div class="image-editor">
<input type="file" id="cropit-image-input" onchange="imgChange(this)">
<div style="overflow:hidden">
<div class="cropit-preview"></div>
<!-- 这是另一个表单,用来上传图片和其他内容 -->
<form class="form-horizontal" style="float:right" role="form" method="post" onsubmit="return validate();"
action="${pageContext.request.contextPath }/business/product/add.action">
<!-- 裁剪后的图片 -->
<div class="form-group namediv">
<label class="col-sm-2" for="name" style="font-size: 15px;"></label>
<div class="col-sm-6">
<div style="width: 100px; height: 100px; border: 1px solid black; overflow:hidden">
<!-- <img src="" id='oldConvas_img' width="100px" height="100px" alt=""> -->
<canvas id="oldConvas" width="100px" height="100px"></canvas>
</div>
</div>
</div>
<!-- 其他表单内容,不写了 -->
</form>
</div>
<form action="{:U('User/changePic')}" method="post" id="picSubmit" onsubmit="return checkCoords();">
<input type="hidden" id="x" name="x" />
<input type="hidden" id="y" name="y" />
<input type="hidden" id="w" name="w" />
<input type="hidden" id="h" name="h" />
<input type="hidden" class="photoStream" id="photoStream" name="photoStream" />
</form>
<!-- <input type="file" class="photo" id="photo" name="photo" onchange="openPhotoCut();" /> -->
</div>
</div>
<div class="form-group">
<button class="btn btn-sm btn-white" onclick='reHeaderImg_submit(this,"{$_SESSION['mid']}")' type="button">确认修改</button>
</div>
</div>
<script type="text/javascript" src=" http://www.no-if.com/Public/Index/js/jquery.js"></script>
<script type="text/javascript" src=" http://www.no-if.com/Public/Index/js/pic_cut/js/jquery.Jcrop.min.js"></script>
<script type="text/javascript">
function cropbox(url){
$('#cropbox').Jcrop({
// start off with jcrop-light class
bgOpacity: 0.5,
bgColor: '#000',
addClass: 'jcrop-normal',
allowResize: 'false',
aspectRatio: 1,
onSelect: updateCoords,
onChange: updateCoords
},function(){
api = this;
api.setSelect([0,0,0+100,0+100]);
api.setOptions({ bgFade: true });
api.ui.selection.addClass('jcrop-selection');
});
}
function updateCoords(c)
{
$('#x').val(c.x);
$('#y').val(c.y);
$('#w').val(c.w);
$('#h').val(c.h);
//更新canvas画板内容
var img=document.getElementById("cropbox");
var ct=document.getElementById("oldConvas");
var ctx=ct.getContext("2d");
//清空画板
ctx.clearRect(0,0, ct.width, ct.height);
//.drawImage(图像对象,原图像截取的起始X坐标,原图像截取的起始Y坐标,原图像截取的宽度,原图像截取的高度,
//绘制图像的起始X坐标,绘制图像的起始Y坐标,绘制图像所需要的宽度,绘制图像所需要的高度);
ctx.drawImage(img, c.x, c.y, c.w, c.h,0,0,100,100); // 画出图片,尺寸100x100
var newImg = ct.toDataURL("image/jpeg"); // 获得图片流
$(".photoStream").val(newImg); // 将图片字符流存储在input中
// layer.closeAll(); // 关闭所有窗口
};
function checkCoords()
{
if (parseInt($('#w').val())) return true;
alert('Please select a crop region then press submit.');
return false;
};
function imgChange(e){
var url = window.URL.createObjectURL(document.getElementById('cropit-image-input').files[0]);
$('#oldConvas_img').attr('src',url)
$('.cropit-preview').html("<img src="+url+" style='margin:0 auto;' id='cropbox' />");
cropbox(url);
}
function reHeaderImg_submit(e,uid){
if (parseInt($('#w').val())) {
// return true ;
} else{
layer.msg('请先截取头像');
return false;
}
// var imageData = $('.image-editor').Jcrop('export');
// console.log($('#picSubmit').serialize());
var x = $("#x").val();
var y = $("#y").val();
var w = $("#w").val();
var h = $("#h").val();
if (x == 0 || y == 0 || w == 0 || h == 0) {
alert("请裁剪图像");
}
var ct=document.getElementById("oldConvas");
var newImg = ct.toDataURL("image/jpeg"); // 获得图片流
$.ajax({
type: "POST",
url: "{:U('User/changePic')}",
data:{'data':newImg},
dataType:'json',
success: function(msg){
if(msg =='1'){
layer.msg(msg.message)
}else{
layer.msg(msg.message)
}
}
});
}
</script>
<style type="text/css">
.reHeaderImg {
background-color: #ccc;
width: 500px;
height: 330px;
font-size: 24px;
display: block;
}
</style>
</body>
</html>
thinkphp:
/*改变头像*/
public function changePic(){
// 判断权限
if($_SESSION['muser']==null || $_SESSION['muser']== ''){
$this->error("非法操作",U('Index/index'));
}
// 检测是否是base64编码
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $_POST['data'], $result)){
$type = $result[2];
$id = $_SESSION['mid'];
// 文件存储路径
$new_file = "./Public/Uploads/UserPic/{$id}.{$type}";
// 验证文件格式
if(!in_array($type,array('jpg', 'gif', 'png', 'jpeg'))){
AD('2','图片格式错误');
}else{
// base64解码
$info = str_replace($result[1], '', $_POST['data']);
$info = base64_decode($info);
// 存储文件
if (file_put_contents($new_file, $info)){
$m = M('user');
$id = $_SESSION['mid'];
// 更新文件
$result = $m->where("id={$id}")->setField('pic',"./Public/Uploads/UserPic/{$id}.{$type}");
AD('1','修改成功');
}else{
AD('2','修改失败');
}
}
}
}
Jcrop图片裁剪+canvas+thinkphp相关推荐
- 使用JCrop进行图片裁剪,裁剪js说明,裁剪预览,裁剪上传,裁剪设计的图片处理的工具类和代码
1.要想制作图片裁剪功能,可以使用网上的裁剪工具JCrop,网址是:https://github.com/tapmodo/Jcrop/ 案例效果如下: 2.引入JCrop的js代码,具体要引入那 ...
- jQuery 图片裁剪插件 Jcrop
Jcrop是一个jQuery图片裁剪插件,它能为你的WEB应用程序快速简单地提供图片裁剪的功能.特点如下: 对所有图片均unobtrusively(无侵入的,保持DOM简洁) 支持宽高比例锁定 支持 ...
- php ci 处理图片 裁剪,jquery.form + Jcrop + CI框架实现图片裁剪上传
功能: 1.通过jquery.form上传图片,并按一定比例显示预览图. 2.通过Jcrop裁剪图片,并显示裁剪预览图 3.通过CI的图像处理类保存剪切后图片 问题: 1.通过jquery.form来 ...
- canvas图片裁剪并base64转化
一.需求 在canvas画布上,假设我们绘制了一张图片,现在需要将该图片进行裁剪,并将裁剪的区域提取成图像,并将该图像转化为base64格式返回,要求编写这样一个脚本. 二.知识储备 HTML5画布中 ...
- html5 手机端 剪裁,用Canvas实现h5移动端图片裁剪
前阵子七夕的时候搞了一个h5活动页,需要做一个本地图片的裁剪上传功能,用于生成一些特定的表白图片.主要是用到了H5的FileApi 和 Canvas.个人感觉图片裁剪功能还是很实用的,故写篇文章分享一 ...
- think php 缩放图片,thinkphp图片裁剪、缩放、加水印方法
thinkphp图片裁剪.缩放.加水印方法如下: /** * 图像的裁剪.缩放.加水印 * @param string $path 路径 * @param int $width 裁剪的宽度/限制的高度 ...
- ThinkPHP图片裁剪
ThinkPHP图片裁剪 function crop_image($file, $width = false, $height = false, $save_name = '', $force = f ...
- jcrop java_SpringMVC结合Jcrop实现图片裁剪
本文实例为大家分享了SpringMVC结合Jcrop实现图片裁剪的具体代码,供大家参考,具体内容如下 一.jsp页面: method="post" enctype="mu ...
- 图片裁剪入门Jcrop
互联网时代,越来越丰富多彩.当然,这离不开网络上各种各样的图片.然而,这也提高了我们对图片处理的要求.像百度.腾讯这样的数量级的处理,如果对图片的上传没有一些优化,那么每年多花费五六十台服务器.额外话 ...
最新文章
- 【通知】《深度学习之模型设计》第三次重印,欢迎读者支持!
- 其实,人的核心职场时间是有限的,一定要和高手玩
- Web API实现微信公众平台开发-接收数据Post
- bootstrap3 表单构建器_FastReport.NET报表设计器连接到OracleDB关系数据库
- 【java】【乱码】Java 读取本地 UTF8 txt文件乱码处理
- 计算机网络 DNS协议 FTP DHCP
- 个人计算机系统构造方式,计算机系统构造概要归纳.doc
- 第一:Python操作MySQL数据库
- hbase java客户端_【HBase教程】(八)HBase JAVA 客户端API使用
- 小米note2鸿蒙ROM,小米note2线刷刷机教程_小米note2第三方rom线刷包_救砖刷机包
- Telink BLE MESH开发|ble mesh开发教程《四》telink_sig_mesh休眠与唤醒
- mysql comment_mysql中的comment用法
- ansys 常见命令集合
- proxychans的使用
- asp.net mysql 查询_asp.net 多条件查询数据库
- python批量填写问卷星问卷
- 网站首页被K的原因及其恢复方法
- condaerror unable to create prefix directory check that you have sufficient permissions
- python tan_Python tan() 函数 - Python 教程 - 自强学堂
- IaC示例:Terraform Ansible自动化创建K3S集群
热门文章
- 合肥工业大学暑期“三下乡”——探访悠悠古村 草药助力振兴
- Linux 软磁盘阵列和磁盘配额
- 6.S081-6缺页异常 - lazy allocation - Page Fault
- GDAL for Python教程(2)
- 2018可信区块链峰会召开 智链ChainNova首发产品C4X
- EMC经典问答85问(31-36问)
- python抓取网络摄像头_python实现从本地摄像头和网络摄像头截取图片功能
- tcp 连接,黑洞,超时
- 乘用车变速器GB/T 28046.3测试多少钱?GB/T 28046.3振动测试
- android wifi 扫描频率,Android WIFI扫描时延