基於HTML5頭像截切上傳

基於HTML5頭像截切上傳

先看效果:
這裏寫圖片描述

實現的原理就是使用了html5提供的fileReader讀取了本地系統的文件,然後使用畫布渲染出來,可以點擊縮小放大,當點擊截切時就截取畫布裏的圖片數據,詳細瞭解可以查看cropbox.js裏的實現,這個截切之後可以拿到的是base64後的字符串,可以把這個字符串傳給後臺,然後在後臺再用base64反解碼,然後就拿到了byte[], 然後再輸出爲文件保存在服務器上就實現了上傳功能。代碼如下:
前端:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jQuery新浪微博頭像裁切預覽代碼</title>
<link rel="stylesheet" href="css/style.css" type="text/css" />
</head>
<body>
<script type="text/javascript" src="js/jquery-1.11.1.min.js"></script> 
<script type="text/javascript" src="js/cropbox.js"></script>
<div class="container">
  <div class="imageBox">
    <div class="thumbBox"></div>
    <div class="spinner" style="display: none">Loading...</div>
  </div>
  <div class="action"> 
    <!-- <input type="file" id="file" style=" width: 200px">-->
    <div class="new-contentarea tc"> <a href="javascript:void(0)" class="upload-img">
      <label for="upload-file">上傳圖像</label>
      </a>
      <input type="file" class="" name="upload-file" id="upload-file" />
    </div>
    <input type="button" id="btnCrop"  class="Btnsty_peyton" value="裁切">
    <input type="button" id="btnZoomIn" class="Btnsty_peyton" value="+"  >
    <input type="button" id="btnZoomOut" class="Btnsty_peyton" value="-" >
    <input type="button" id="btnSave" class="Btnsty_peyton" value="save" >
  </div>
  <div class="cropped"></div>
</div>
<script type="text/javascript">
$(window).load(function() {
  var options =
  {
    thumbBox: '.thumbBox',
    spinner: '.spinner',
    imgSrc: 'images/avatar.png'
  }
  var cropper = $('.imageBox').cropbox(options);
  $('#upload-file').on('change', function () {
    var reader = new FileReader();
    reader.onload = function (e) {
      options.imgSrc = e.target.result;
      cropper = $('.imageBox').cropbox(options);
    }
    reader.readAsDataURL(this.files[0]);
    this.files = [];
  })
  $('#btnCrop').on('click', function () {
    var img = cropper.getDataURL();
    $('.cropped').html('');
    $('.cropped').append('<img src="' + img + '" align="absmiddle" style="width:64px;margin-top:4px;border-radius:64px;box-shadow:0px 0px 12px #7E7E7E;" ><p>64px*64px</p>');
    $('.cropped').append('<img src="' + img + '" align="absmiddle" style="width:128px;margin-top:4px;border-radius:128px;box-shadow:0px 0px 12px #7E7E7E;"><p>128px*128px</p>');
    $('.cropped').append('<img src="' + img + '" align="absmiddle" style="width:180px;margin-top:4px;border-radius:180px;box-shadow:0px 0px 12px #7E7E7E;"><p>180px*180px</p>');
  })
  $('#btnZoomIn').on('click', function () {
    cropper.zoomIn();
  })
  $('#btnZoomOut').on('click', function () {
    cropper.zoomOut();
  })
  $('#btnSave').on('click', function(){
    $.post('/upload',{'imageData':cropper.getDataURL()});
  })
});
</script>

<div style="text-align:center;margin:50px 0; font:normal 14px/24px 'MicroSoft YaHei';">
</div>
</body>
</html>

後端的代碼:

@WebServlet(name = "uploadServlet", urlPatterns = "/upload")
public class UploadServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String imageData = req.getParameter("imageData");
        imageData = imageData.replace("data:image/png;base64,", "");
        byte[] imageByte = Base64.getDecoder().decode(imageData.getBytes());
        OutputStream fos = new FileOutputStream(new File("E:/test.png"));
        fos.write(imageByte);
        fos.close();

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章