PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁


Posted in PHP onJune 09, 2014

昨天花了点时间整合了一下头像插件 东拼西凑的成果 先来看下效果

PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁

1.先使用ajaxfileupload插件做异步上传。这个地方我本来想做个上传进度的效果,但技术有限失败了。上传按钮我还做了一个文件大小的限制,但是由于浏览器兼容性的问题,不完美在IE6--IE9之间还有很多问题需要解决

getFileSize函数是用于判断文件大小的函数

function getFileSize(fileName) {
                var byteSize = 0;
                //console.log($("#" + fileName).val());
                if($("#" + fileName)[0].files) {
                    var byteSize  = $("#" + fileName)[0].files[0].size;
                }else {
    //此处由于有浏览器兼容问题 还没完成大小判断的逻辑
                }
                //alert(byteSize);
                byteSize = Math.ceil(byteSize / 1024) //KB
                return byteSize;//KB
            }

2.按钮上传事件绑定

$("#btnUpload").click(function () {
                var allowImgageType = ['jpg', 'jpeg', 'png', 'gif'];
                var file = $("#file1").val();
                //获取大小
                var byteSize = getFileSize('file1');
                //获取后缀
                if (file.length > 0) {
                    if(byteSize > 2048) {
                        alert("上传的附件文件不能超过2M");
                        return;
                    }
                    var pos = file.lastIndexOf(".");
                    //截取点之后的字符串
                    var ext = file.substring(pos + 1).toLowerCase();
                    //console.log(ext);
                    if($.inArray(ext, allowImgageType) != -1) {
                        ajaxFileUpload();
                    }else {
                        alert("请选择jpg,jpeg,png,gif类型的图片");
                    }
                }
                else {
                    alert("请选择jpg,jpeg,png,gif类型的图片");
                }
            });

3.在上传成功后返回图片路径,并初始化图片裁剪。图片裁剪就直接用ajax请求到php

function ajaxFileUpload() {
                $.ajaxFileUpload({
                    url: 'action.php', //用于文件上传的服务器端请求地址
                    secureuri: false, //一般设置为false
                    fileElementId: 'file1', //文件上传空间的id属性  <input type="file" id="file" name="file" />
                    dataType: 'json', //返回值类型 一般设置为json
                    success: function (data, status)  //服务器成功响应处理函数
                    {
                        //var json = eval('(' + data + ')');
                        //alert(data);
                        $("#picture_original>img").attr({src: data.src, width: data.width, height: data.height});
                        $('#imgsrc').val(data.path);
                        //alert(data.msg);
                        //同时启动裁剪操作,触发裁剪框显示,让用户选择图片区域
                        var cutter = new jQuery.UtrialAvatarCutter({
                                //主图片所在容器ID
                                content : "picture_original",
                                //缩略图配置,ID:所在容器ID;width,height:缩略图大小
                                purviews : [{id:"picture_200",width:200,height:200},{id:"picture_50",width:50,height:50},{id:"picture_30",width:30,height:30}],
                                //选择器默认大小
                                selector : {width:200,height:200},
                                showCoords : function(c) { //当裁剪框变动时,将左上角相对图片的X坐标与Y坐标 宽度以及高度
                                    $("#x1").val(c.x);
                                    $("#y1").val(c.y);
                                    $("#cw").val(c.w);
                                    $("#ch").val(c.h);
                                },
                                cropattrs : {boxWidth: 500, boxHeight: 500}
                            }
                        );
                        cutter.reload(data.src);
                        $('#div_avatar').show();
                    },
                    error: function (data, status, e)//服务器响应失败处理函数
                    {
                        alert(e);
                    }
                })
                return false;
            }
            $('#btnCrop').click(function() {
                $.getJSON('action2.php', {x: $('#x1').val(), y: $('#y1').val(), w: $('#cw').val(), h: $('#ch').val(), src: $('#imgsrc').val()}, function(data) {
                    alert(data.msg);
                });
                return false;
            });

4.HTML文件代码如下

<body>
    <p><input type="file" id="file1" name="file1" /></p>
    <input type="button" value="上传" id="btnUpload"/>
    <div style="display:none;overflow:hidden" id="div_avatar">
        <div style="width:500px;height:500px;overflow:hidden;float:left;" id="picture_original"><img alt="" src="" /></div>
        <div id="picture_200" style="float:left;margin-left:20px"></div>
        <div id="picture_50" style="float:left;margin-left:20px"></div>
        <div id="picture_30" style="float:left;margin-left:20px"></div>
        <input type="hidden" id="x1" name="x1" value="0" />
        <input type="hidden" id="y1" name="y1" value="0" />
        <input type="hidden" id="cw" name="cw" value="0" />
        <input type="hidden" id="ch" name="ch" value="0" />
        <input type="hidden" id="imgsrc" name="imgsrc" />
        <input type="button" value="裁剪上传" id="btnCrop"/>
    </div>
</body>

现在还很粗糙,功能还有很多需要完善的地方。大家有兴趣的话,就拿去使用吧。如果完善了进度条和文件大小的功能,记得也分享给我一份哦。

附上源码 https://3water.com/codes/174384.html

PHP 相关文章推荐
综合图片计数器
Oct 09 PHP
PHP实现用户认证及管理完全源码
Mar 11 PHP
php中计算时间差的几种方法
Dec 31 PHP
php 随机排序广告的实现代码
May 09 PHP
PHP源码之explode使用说明
Aug 05 PHP
PHP函数学习之PHP函数点评
Jul 05 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
Jun 09 PHP
php通过exif_read_data函数获取图片的exif信息
May 21 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
Mar 15 PHP
php模拟post上传图片实现代码
Jun 24 PHP
php-fpm服务启动脚本的方法
Apr 27 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 PHP
神盾加密解密教程(三)PHP 神盾解密工具
Jun 08 #PHP
神盾加密解密教程(二)PHP 神盾解密
Jun 08 #PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
Jun 08 #PHP
PHP获取中英混合字符串长度的方法
Jun 07 #PHP
使用PHP破解防盗链图片的一个简单方法
Jun 07 #PHP
PHP防止post重复提交数据的简单例子
Jun 07 #PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
Jun 06 #PHP
You might like
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
phpstorm激活码2020附使用详细教程
2020/09/25 PHP
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
使用jQuery判断IE浏览器版本的代码
2014/06/14 Javascript
JavaScript中的单引号和双引号报错的解决方法
2014/09/01 Javascript
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
2017/01/04 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
js实现常见的工具条效果
2017/03/02 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
2018/04/17 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
基于Fixed定位的框选功能的实现代码
2019/05/13 Javascript
openlayers实现地图测距测面
2020/09/25 Javascript
python解析json实例方法
2013/11/19 Python
Python常见异常分类与处理方法
2017/06/04 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
python与字符编码问题
2019/05/24 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
scrapy头部修改的方法详解
2020/12/06 Python
美国高端寝具品牌:Coyuchi
2017/02/08 全球购物
深深扎根运动世界的生活品牌:Tillys
2017/10/30 全球购物
大学同学聚会邀请函
2014/01/19 职场文书
办公室副主任职责范本
2014/03/08 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
工商管理本科生求职信
2014/07/13 职场文书
应聘护士求职信
2014/07/21 职场文书
学习型党组织心得体会
2014/09/12 职场文书
个性发展自我评价2015
2015/03/09 职场文书
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python