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之第五天
Oct 09 PHP
模拟SQLSERVER的两个函数:dateadd(),datediff()
Oct 09 PHP
PHP5 安装方法
Jan 15 PHP
php is_file()和is_dir()用于遍历目录时用法注意事项
Mar 02 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
Jun 20 PHP
php根据操作系统转换文件名大小写的方法
Feb 24 PHP
thinkphp浏览历史功能实现方法
Oct 29 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
Dec 17 PHP
PHP设计模式之观察者模式实例
Feb 22 PHP
Joomla语言翻译类Jtext用法分析
May 05 PHP
PHP 序列化和反序列化函数实例详解
Jul 18 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 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中使用Curl、socket、file_get_contents三种方法POST提交数据
2011/08/12 PHP
PHP 时间日期操作实战
2011/08/26 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
php使用number_format函数截取小数的方法分析
2016/05/27 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
JavaScript中的对象化编程
2008/01/16 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
JavaScript、jQuery与Ajax的关系
2016/01/24 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
详解Angular 4.x NgIf 的用法
2017/05/22 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
JS定时器如何实现提交成功提示功能
2020/06/12 Javascript
vue 遮罩层阻止默认滚动事件操作
2020/07/28 Javascript
[05:10]2014DOTA2国际邀请赛 通往胜利之匙赛场探秘之旅
2014/07/18 DOTA
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
TensorFlow神经网络优化策略学习
2018/03/09 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
numpy 声明空数组详解
2019/12/05 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
洗车工岗位职责
2014/03/15 职场文书
《三亚落日》教学反思
2014/04/26 职场文书
三严三实对照检查材料
2014/08/25 职场文书
信访稳定工作汇报
2014/10/27 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
法务专员岗位职责
2015/02/14 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
2015初中政治教学工作总结
2015/07/21 职场文书