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 相关文章推荐
用Flash图形化数据(二)
Oct 09 PHP
使用 php4 加速 web 传输
Oct 09 PHP
PHP中date()日期函数有关参数整理
Jul 19 PHP
解析获取优酷视频真实下载地址的PHP源代码
Jun 26 PHP
smarty缓存用法分析
Dec 16 PHP
Windows下编译PHP5.4和xdebug全记录
Apr 03 PHP
深入浅析PHP7.0新特征(五大新特征)
Oct 29 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
Mar 18 PHP
PHP中常用的数组操作方法笔记整理
May 16 PHP
Thinkphp框架开发移动端接口(1)
Aug 18 PHP
[原创]php实现数组按拼音顺序排序的方法
May 03 PHP
Thinkphp5.0 框架Model模型简单用法分析
Oct 11 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把JPEG图片转换成Progressive JPEG的方法
2014/06/30 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
2015/11/17 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
PHP 中常量的知识整理
2017/04/14 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
2010/03/04 Javascript
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
jQuery中insertAfter()方法用法实例
2015/01/08 Javascript
JS实现的验证身份证及获取地区功能示例
2017/01/16 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
react-native使用react-navigation进行页面跳转导航的示例
2017/09/07 Javascript
基于ajax和jsonp的原生封装(实例)
2017/10/16 Javascript
微信小程序自动客服功能
2017/11/02 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
2018/08/10 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
js canvas实现俄罗斯方块
2020/10/11 Javascript
python实现中文输出的两种方法
2015/05/09 Python
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
Python实现在线音乐播放器
2017/03/03 Python
python for循环输入一个矩阵的实例
2018/11/14 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
Flask框架路由和视图用法实例分析
2019/11/07 Python
Python调用C语言程序方法解析
2020/07/07 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
Hudson Jeans官网:高级精制牛仔裤
2018/11/28 全球购物
中专生毕业个人鉴定
2014/02/26 职场文书
初中军训感想300字
2014/03/05 职场文书
晨会主持词
2014/03/17 职场文书
公司租房协议书
2014/10/14 职场文书
人口与计划生育责任书
2015/05/09 职场文书
无婚姻登记记录证明
2015/06/18 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书
教你利用python实现企业微信发送消息
2021/05/23 Python