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 相关文章推荐
PHP 危险函数解释 分析
Apr 22 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
Jun 09 PHP
PHP中常用的输出函数总结
Sep 22 PHP
php实现字符串首字母转换成大写的方法
Mar 17 PHP
php隐藏实际地址的文件下载方法
Apr 18 PHP
PHP嵌套输出缓冲代码实例
May 12 PHP
基于PHP实现商品成交时发送短信功能
May 11 PHP
eclipse php wamp配置教程
Jun 30 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
Oct 25 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
phpcms的分类名称和类别名称的调用
Jan 05 PHP
laravel框架查询数据集转为数组的两种方法
Oct 10 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
实用函数3
2007/11/08 PHP
PHP cron中的批处理
2008/09/16 PHP
php 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
destoon实现商铺管理主页设置增加新菜单的方法
2014/06/26 PHP
微信获取用户地理位置信息的原理与步骤
2015/11/12 PHP
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
js遍历td tr等html元素
2012/12/13 Javascript
JS对select控件option选项的增删改查示例代码
2013/10/21 Javascript
js清除input中type等于file的值域(示例代码)
2013/12/24 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
学习JavaScript设计模式之享元模式
2016/01/18 Javascript
js实现京东轮播图效果
2017/06/30 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
原生javascript AJAX 三级联动的实现代码
2018/05/04 Javascript
webstorm添加*.vue文件支持
2018/05/08 Javascript
新版小程序登录授权的方法
2018/12/12 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
jQuery实现评论模块
2020/08/19 jQuery
Python监控主机是否存活并以邮件报警
2015/09/22 Python
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
python实现简单中文词频统计示例
2017/11/08 Python
Python基于pandas爬取网页表格数据
2020/05/11 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
夜大毕业生自我鉴定
2013/10/31 职场文书
求职简历中的自我评价分享
2013/12/08 职场文书
无工作经验者个人求职信范文
2013/12/22 职场文书
小学岗位竞聘方案
2014/01/22 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
多属性、多分类MySQL模式设计
2021/04/05 MySQL
pytorch中的numel函数用法说明
2021/05/13 Python
《群青的幻想曲》京力秋树角色PV公开
2022/04/08 日漫
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL