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与javascript的两种交互方式
Oct 09 PHP
php中文字符截取防乱码
Mar 28 PHP
php 生成饼图 三维饼图
Sep 28 PHP
10个实用的PHP代码片段
Sep 02 PHP
Codeigniter购物车类不能添加中文的解决方法
Nov 29 PHP
php发送html格式文本邮件的方法
Jun 10 PHP
thinkPHP中多维数组的遍历方法
Jan 09 PHP
PHP访问数据库集群的方法小结
Mar 14 PHP
php分页原理 分页代码 分页类制作教程
Sep 23 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
Aug 15 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
May 27 PHP
laravel http 自定义公共验证和响应的方法
Sep 29 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
Yii2中添加全局函数的方法分析
2017/05/04 PHP
重定向实现代码
2006/11/20 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
JS输入用户名自动显示邮箱后缀列表的方法
2015/01/27 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
关于微信中a链接无法跳转问题
2016/08/02 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
JavaScript实现弹窗效果代码分析
2017/03/09 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
js调用刷新界面的几种方式
2017/05/03 Javascript
关于Ajax的原理以及代码封装详解
2017/09/08 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
微信小程序获取用户信息并保存登录状态详解
2019/05/10 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
2020/02/05 Javascript
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
2020/07/31 Javascript
python简单判断序列是否为空的方法
2015/06/30 Python
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
Django如何自定义model创建数据库索引的顺序
2019/06/20 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
CSS3实现彩色进度条动画的示例
2020/10/29 HTML / CSS
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
会计专业应届生求职信
2013/11/24 职场文书
旅游管理专业个人求职信范文
2013/12/24 职场文书
个人批评与自我批评
2014/10/15 职场文书
教师读书笔记
2015/06/29 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记
《原神》新角色演示“神里绫人:林隐泓洄” 宠妹狂魔
2022/04/03 其他游戏