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实现与ASP Banner组件相似的类
Oct 09 PHP
THINKPHP+JS实现缩放图片式截图的实现
Mar 07 PHP
php文章内容分页并生成相应的htm静态页面代码
Jun 07 PHP
Zend Studio (eclipse)使用速度优化方法
Mar 23 PHP
simplehtmldom Doc api帮助文档
Mar 26 PHP
用PHP读取超大文件的实例代码
Apr 01 PHP
有关PHP中MVC的开发经验分享
May 17 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
Aug 10 PHP
PHP curl 获取响应的状态码的方法
Jan 13 PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 PHP
PHP判断是否微信访问的方法示例
Mar 27 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
Apr 27 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中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
PHP二维数组的去重问题解析
2011/07/17 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
深入解析PHP中逗号与点号的区别
2013/08/05 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
PHP实现会员账号单唯一登录的方法分析
2019/03/07 PHP
php array_map()函数实例用法
2021/03/03 PHP
Javascript公共脚本库系列(一): 弹出层脚本
2011/02/24 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
JavaScript实现网页对象拖放功能的方法
2015/04/15 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
原生js实现ajax方法(超简单)
2016/09/20 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
全面分析JavaScript 继承
2019/05/30 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
原生JavaScript实现轮播图
2021/01/10 Javascript
Python时间获取及转换知识汇总
2017/01/11 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
python实现控制台输出彩色字体
2020/04/05 Python
python图片指定区域替换img.paste函数的使用
2020/04/09 Python
Pycharm github配置实现过程图解
2020/10/13 Python
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
乐高瑞士官方商店:LEGO CH
2020/08/16 全球购物
.net软件工程师面试题
2015/03/31 面试题
销售副总经理岗位职责
2013/12/11 职场文书
施工班组长岗位职责
2014/01/05 职场文书
个人简历中的自我评价怎么写
2014/01/26 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
python编写函数注意事项总结
2021/03/29 Python
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL
Python基本知识点总结
2022/04/07 Python