jcrop实现图片区域选择、裁剪及上传

本文介绍了如何使用jcrop库实现图片区域选择、裁剪和上传功能。前端涉及图片显示、更换和裁剪确认,后端处理图片裁剪及保存。通过展示前端HTML、JS代码和部分后台处理代码,详细阐述了整个流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先说明需要引入哪些文件:

jquery.Jcrop.cssjquery.Jcrop.jsJQuery.js

其次说明需要哪些页面:

前端:

1.显示图片以及选择区域的页面resume_avatar.html, 部分代码如下:

1.1图片显示

  <div id="imgPreview" style="max-width:400px;min-height:200px;">
     <img   src="demo.jpg"  id="target" alt="头像预览" style="width:100%;"  class="target" />
  </div>

  <div id="preview-pane">
    <div class="preview-container" >
      <img   src="demo.jpg"  class="jcrop-preview" alt="头像预览" />
    </div>
  </div>

1.2图片的更换

html代码

          <form action="{:U('Index/do_resume_avatar')}" method="post" model-node='account_save' enctype='multipart/form-data' id="form1">
            <dl class="form-set">
              <dd>
                <div class="form-tt"><h5>上传头像:</h5></div>             
                <div class="form-row"><input type="file" name="pic" id="pic" onchange="picsubmit()"/></div>               
              </dd>
            </dl>    
         </form>

js代码

function picsubmit(){
  //var y=document.getElementById(pic).value;
  $("#form1").submit();
}

1.3图片选择完成后,点击确定

html代码

                    <form action="{:U('Index/resume_avatar_done')}" method="post" enctype='multipart/form-data' id="form2">  
                        <input type="hidden" id="x" name="x" />  
                        <input type="hidden" id="y" name="y" />  
                        <input type="hidden" id="w" name="w" />  
                        <input type="hidden" id="h" name="h" />  
                        <div class="form-row" style="padding-left:130px;">
                        <button type="submit" class="btn-green-big" id="submit-avatar" onclick="cutImage()">下一步</button>  
                        </div>
                    </form>  

js代码

function cutImage(){
   var width1 = {$image_size}; //图片实际的宽度
   var width2 = $('.target').width(); //图片显示的宽度
   var kk = (width1/width2);
    

    $("#target").Jcrop( { 
            onChange : showPreview,  
            onSelect : showPreview, 
        });  

function showPreview(coords) { 
   if(kk == 1){
    $('#x').val(coords.x);  
    $('#y').val(coords.y);  
    $('#w').val(coords.w);  
    $('#h').val(coords.h);  
    }else{
    $('#x').val((coords.x)*kk);  
    $('#y').val((coords.y)*kk);  
    $('#w').val((coords.w)*kk);  
    $('#h').val((coords.h)*kk);
    }
};

}


2.图片处理完成之后跳转的页面resume_avatar_done.html

只需要显示处理完成的图片,并且显示多少秒之后跳转就可以了

html代码

 <img src="{$thumb_img}" id="target" alt="头像预览" style="max-width:400px;min-height:300px;"/>
 <div class="set-hd"><span ><h3>(头像编辑成功!将在 <span id="mes" style="color:red;">5</span> 秒钟后返回!)<h3></span></div>

js代码

<script language="javascript" type="text/javascript">
    var i = 5;
    var intervalid;
    intervalid = setInterval("fun()", 1000);
    function fun() {
    if (i == 0) {
    window.location.href = "{:U('job/Index/z_resume')}";
    clearInterval(intervalid);
    }
    document.getElementById("mes").innerHTML = i;
    i--;
    }
</script>    


后台:

1.首先是resume_avatar页面,只需要传两个参数,一个是图片的路径$resume_data,还有一个是图片的宽度$image_size;

2.再者是resume_avatar_do页面,其功能是处理图片的更换(并不处理选择完成后的图片),并且保存到数据库中,还有传参数到前端进行显示,详细代码不做赘述;

3.最后是resume_avatar_done页面,其功能是处理选择完成后的图片,并且将图片裁剪成选择区域相同大小的图片,部分代码如下:

        $a = $_POST;
        $x = $a['x'];
        $y = $a['y'];
        $w = $a['w'];
        $h = $a['h'];
  
        $path = $datas['pic'];
        $path2 = substr($path,0,strrpos($path, '.'));        
        
        //var_dump($path2);exit;
        
        //$thumb_img = "Upload_File/resume_avatar/demo_1.jpg";
        //切割图片
        //获取原图
        $img=imagecreatefromjpeg($path);
        //获取图片的宽度及高度
        $img_width=imagesx($img);
        $img_height=imagesy($img);
        //缩略图的宽度与高度
        //$new_img_width=$w;
        //$new_img_height=$h;
        //生成新图片(缩略图)
        $new_img=imagecreatetruecolor($w,$h);
        //创建新的图像对象(缩略图)
        imagecopyresized($new_img,$img,0,0,$x,$y,$w,$h,$w,$h);
        //imagecopyresized函数拷贝源图像的全部或部分并调整大小
        //生成图片
        $thumb_img = $path2.'_thumb.jpg';
        imagejpeg($new_img,$thumb_img);
        $datas['suo'] = $thumb_img;
        //销毁图像
        imagedestroy($new_img);


resume_avatar.html页面的效果图如下:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值