PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁

 更新时间:2014年06月09日 08:45:59   作者:  
在做项目的时候,经常需要一些会员系统相关的内容,比如头像的上传与裁剪等等,下面将这块内容分享给大家

昨天花了点时间整合了一下头像插件 东拼西凑的成果 先来看下效果

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://www.jb51.net/codes/174384.html

相关文章

  • php使用json_encode对变量json编码

    php使用json_encode对变量json编码

    这篇文章主要是说明 json_encode 使用时一个需要注意的细节,无论返回的是数组还是 json,都不代表这一定就是个错误的返回结果,当前端需要的数组时,数组就是正确的结果,反之亦然
    2014-04-04
  • thinkPHP5 ajax提交表单操作实例分析

    thinkPHP5 ajax提交表单操作实例分析

    这篇文章主要介绍了thinkPHP5 ajax提交表单操作,结合实例形式分析了thinkPHP5的ajax提交表单操作技巧,并附带说明了表单提交中的参数传递与处理技巧,需要的朋友可以参考下
    2017-11-11
  • PHP实现爬虫爬取图片代码实例

    PHP实现爬虫爬取图片代码实例

    这篇文章主要介绍了PHP实现爬虫爬取图片代码实例,有实际的代码例子,感兴趣的同学可以尝试下
    2021-03-03
  • php发送get、post请求的6种方法简明总结

    php发送get、post请求的6种方法简明总结

    这篇文章主要介绍了php发送get、post请求的6种方法简明总结,分别为使用file_get_contents 、fopen、fsockopen、curl来发送GET和POST请求,需要的朋友可以参考下
    2014-07-07
  • PHP屏蔽关键字实现方法

    PHP屏蔽关键字实现方法

    本篇文章主要介绍了PHP屏蔽关键字实现方法,具有一定的参考价值,有需要的可以了解一下。
    2016-11-11
  • PHP 二维关联数组根据其中一个字段排序(推荐)

    PHP 二维关联数组根据其中一个字段排序(推荐)

    这篇文章主要介绍了PHP 二维关联数组根据其中一个字段排序的实例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-04-04
  • thinkphp5使html5实现动态跳转的例子

    thinkphp5使html5实现动态跳转的例子

    今天小编就为大家分享一篇thinkphp5使html5实现动态跳转的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • PHP面向对象教程之自定义类

    PHP面向对象教程之自定义类

    所谓面向对象就是什么时候什么东西做什么,我们设计类的时候需要想的就是怎么做的内容,那么怎么样的一个类才算是符合OOP的思想呢,答案是:这个类写好之后,在使用的过程中,能准确的代表一个事物,在书写的时候代码要和思维描述一致,即这个东西做什么。
    2014-06-06
  • 谈谈php对接芝麻信用踩的坑

    谈谈php对接芝麻信用踩的坑

    由于支付宝的普及,芝麻信用的使用也越来越广,本文谈谈php对接芝麻信用踩的坑,有兴趣的同学可以了解一下。
    2016-12-12
  • CI框架学习笔记(一) - 环境安装、基本术语和框架流程

    CI框架学习笔记(一) - 环境安装、基本术语和框架流程

    本文是CI框架学习笔记的第一篇,主要介绍了CI框架的环境安装,基本术语以及框架流程,非常的详细,有需要的朋友可以参考下
    2014-10-10

最新评论