zoukankan      html  css  js  c++  java
  • 移动端图片裁剪解决方案

    1.需求

    移动端头像裁剪功能

    2.解决方案

    使用jq和jcrop插件完成

    3.解决思路

    先把可移动的层的左上角左边和长宽传到后端,后端获得这些数据之后用gd库的函数去裁剪服务端的图片。

    默认要裁剪的图片已经上传到后台,图片上传的解决方案这下面链接

    http://www.cnblogs.com/norm/p/6188318.html

    4.具体代码

    a.引入类库

    <link rel="stylesheet" href="css/jquery.Jcrop.css">
    <script src="js/jquery-1.7.2-min.js"></script>
    <script src="js/jquery.jcrop.js"></script>

    b.编写html代码

    <div id="box">
    <img id="element_id" src="22.jpg">    
    </div>
    
    
    
    <div class="hidden">
        <input type="hidden" id="x1">
        <input type="hidden" id="y1">
        <input type="hidden" id="x2">
        <input type="hidden" id="y2">
        <input type="hidden" id="w">
        <input type="hidden" id="h">
    </div>
    
    <button id="save">保存</button>

    c.编写css代码

           *{
                margin: 0;
                padding: 0;
            }
            img{
                width:100%;
            }
            #box{
                overflow: hidden;
            }

    d.编写js代码

    这里注意用每次change或select的时候调用showCoords函数去更新隐藏域的值,最后把这些值ajax提交给后台

    <script>
    
    $(document).ready(function(){
    
         
        var jcrop_api; 
      var boundx;
         var    boundy;
    
    
         //记得放在jQuery(window).load(...)内调用,否则Jcrop无法正确初始化
        $("#element_id").Jcrop({
            onChange:showCoords,
            onSelect:showCoords,
        },function(){
          jcrop_api = this;
          var bounds =  jcrop_api.getBounds();
          boundx = bounds[0];
          boundy = bounds[1];
    
                 
          jcrop_api.setOptions({
              allowResize: false
            });
          jcrop_api.setOptions(  {
               minSize: [200, 200],
             maxSize: [200, 200]
            });
    
    
          jcrop_api.animateTo([0,0,200,200]);
             
    
        });    
     
    
        //简单的事件处理程序,响应自onChange,onSelect事件,按照上面的Jcrop调用
        function showCoords(obj){
            $("#x1").val(obj.x);
            $("#y1").val(obj.y);
            $("#x2").val(obj.x2);
            $("#y2").val(obj.y2);
            $("#w").val(obj.w);
            $("#h").val(obj.h);
        }
    
        $('#save').click(function(){
            var x=$("#x1").val();
            var y=$("#y1").val();
            var w=$("#w").val();
            var h=$("#h").val();
    
    
            var obj={
                x:x,
                y:y,
                w:w,
                h:h
            }
    
            $.ajax({
              type : "POST", //默认为get  
                    dataType : "json",  
                    data : obj,
                    url : 'test.php',  
                    async: false,   
                    success : function(json){
                      if(json.result=='success')
                      {
                        alert(json.message);
                      }
                    }  
    
            })
        });
    
    
    })
    
    </script>

    e.后端获得坐标去裁剪图片并返回数据

    默认图片的路径是$path = 'images/5853db6605f57.jpeg'。实际中需替换成实际图片路径

    <?php
    
    $x = $_POST['x'];
    $y = $_POST['y'];
    $w = $_POST['w'];
    $h = $_POST['h'];
    
    
    $targ_w = 150;
    $targ_h = 150;
    
    $path = 'images/5853db6605f57.jpeg';
    $img_r = imagecreatefromjpeg($path);
    $dst_r = imageCreateTrueColor($targ_w,$targ_w);
    
    $avatar_path = 'images/avatar.jpg';
    
    
    imagecopyresampled($dst_r,$img_r,0,0,$x,$y,$targ_w,$targ_h,$w,$h);
    
    
    imagejpeg($dst_r,$avatar_path,100);
    
    
    imagedestroy($img_r);
    imagedestroy($dst_r);
    
    
    if(!file_exists($avatar_path))
    {
        $result['message'] = "头像保存失败";
    }
    else
    {
        $result['result'] = 'success';
        $result['message'] = '头像保存成功';
    }
    
    echo json_encode($result);

    5.总结

    前端的主要工作是获得需要裁剪的左上角坐标和长宽,具体裁剪的工作由后端负责。

    参考资料:http://code.ciaoca.com/jquery/jcrop/

  • 相关阅读:
    fiddler应用之Composer(发送接口请求)
    fiddler应用之AutoResponder(fiddler的重定向页面功能)
    fiddler应用之设置断点(fiddler篡改request和response数据)
    fiddler应用之过滤器(用fiddler筛选特定网络请求)
    fiddler配置之对移动设备进行抓包证书安装
    fiddler配置之设置手机代理
    外部排序的基本概念
    80天考研核心短语
    地址访问冲突问题(四体交叉存取)
    制约函数法
  • 原文地址:https://www.cnblogs.com/norm/p/6188396.html
Copyright © 2011-2022 走看看