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&amp;&amp;mysql)一
Oct 09 PHP
PHP正确配置mysql(apache环境)
Aug 28 PHP
打造超酷的PHP数据饼图效果实现代码
Nov 23 PHP
PHPThumb PHP 图片缩略图库
Mar 11 PHP
php.ini修改php上传文件大小限制的方法详解
Jun 17 PHP
php通过隐藏表单控件获取到前两个页面的url
Sep 09 PHP
php中explode的负数limit用法分析
Feb 27 PHP
变量在 PHP7 内部的实现(二)
Dec 21 PHP
Yii控制器中操作视图js的方法
Jul 04 PHP
php 实现Hash表功能实例详解
Nov 29 PHP
php实现遍历文件夹的方法汇总
Mar 02 PHP
PHP实现根据数组某个键值大小进行排序的方法
Mar 13 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同时连接多个mysql数据库示例代码
2014/03/17 PHP
在PHP中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
浅析Yii2中GridView常见操作
2016/04/22 PHP
php 函数中静态变量使用的问题实例分析
2020/03/05 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
推荐4个原生javascript常用的函数
2015/01/12 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
快速掌握Node.js模块封装及使用
2016/03/21 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
JavaScript贪吃蛇小组件实例代码
2017/08/20 Javascript
bootstrap Table服务端处理分页(后台是.net)
2017/10/19 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
2018/04/18 Javascript
layui获取选中行数据的实例讲解
2018/08/19 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
在Python的web框架中配置app的教程
2015/04/30 Python
python机器学习之神经网络(二)
2017/12/20 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
django 将model转换为字典的方法示例
2018/10/16 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
经典C++面试题一
2016/11/06 面试题
银行实习的自我鉴定
2013/12/10 职场文书
车间组长岗位职责
2013/12/20 职场文书
办公室秘书岗位职责范本
2014/02/11 职场文书
鸟的天堂导游词
2015/01/31 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
python实现自动清理文件夹旧文件
2021/05/10 Python
再谈python_tkinter弹出对话框创建
2022/03/20 Python