国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

使用cropper.js裁剪頭像的實例代碼

2019-11-19 15:14:25
字體:
來源:轉載
供稿:網友

最近項目需要頭像裁剪的功能,在網上找了一下,發現了github上的cropper項目還不錯,借鑒了一下。。用起來挺簡單的,下面是我做的一個小例子:

開始先放個成品圖:

下面給出前后端的代碼

前端頁面是一個單獨的jsp頁面,用來做彈出層來裁剪圖片比較好。

關于jsp頁面引用的兩個關于cropper的 文件,我就不提供了。大家需要的可以去官方的github上去下載。

地址:https://github.com/fengyuanchen/cropper

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ include file="../common_front.jsp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title><link rel="stylesheet" href="${path }/front/plugins/cropper/cropper.css" rel="external nofollow" ><script src="${path }/front/plugins/cropper/cropper.js"></script> <style> .container {  max-width: 640px;  margin: 20px auto; } img {  max-width: 100%; } #result img{  max-width: 200px;  max-height: 200px; } .cropper-view-box, .cropper-face {  border-radius: 50%; } </style> <script type="text/javascript"> function getSize(size){  var num=parseInt(size);  if(num<=300){//先要求圖片的大小小于300之間  return num;  }  return getSize(num/2); } function getRoundedCanvas(sourceCanvas) {  var canvas = document.createElement('canvas');  var context = canvas.getContext('2d');  var width = sourceCanvas.width;  var height = sourceCanvas.height;  width=getSize(width);  height=width;  canvas.width = width;  canvas.height = height;  context.beginPath();  //這里是控制裁剪區域的大小(這里也決定你所要生成的圖片的大小和形狀 我這邊用的是圓形的頭像 大家有別的需要可以修改)  context.arc(width/2, height/2, Math.min(width, height)/2, 0, 2 * Math.PI);  context.strokeStyle = 'rgba(0,0,0,0)';  context.stroke();  context.clip();  context.drawImage(sourceCanvas, 0, 0, width, height);  return canvas; } $(function(){  var $image = $('#image');  var $button = $('#button');  var $result = $('#result');  var croppable = false;  $image.cropper({   aspectRatio: 1,   viewMode: 1,   ready: function () {    croppable = true;   }  });  $button.on('click', function () {   var croppedCanvas;   var roundedCanvas;   if (!croppable) {    return;   }   // 裁剪  croppedCanvas = $image.cropper('getCroppedCanvas');  //判斷圖片大小,如果超過1080 則返回   if(croppedCanvas.width>1080){   alert("圖片過大,請重新選擇!");   return false;   }   // 生成圓形  roundedCanvas = getRoundedCanvas(croppedCanvas);   //將裁剪區域的圖片轉出圖片的base64編碼,放到表單里提交到后臺。后臺再對其進行解碼,保存。   $("#icon").val(roundedCanvas.toDataURL());   $.ajax({   url:'${path }/front/saveUserIcon',   data:$("#submitForm").serialize(),   type:'POST',   success:function(data){   if(data.code==200){    parent.location.reload(); // 父頁面刷新      var index = parent.layer.getFrameIndex(window.name); //獲取窗口索引      parent.layer.close(index);   }else{   warningAlert(data.msg);   }   }   });   return false; }); //當選擇完圖片后,直接提交表單到后臺,圖片保存后再回到此頁面。這樣此頁面的圖片裁剪畫布就改變成你所選擇的圖片了  $("#file").change(function(){   var fileName=$("#file").val();   fileName=fileName.toLowerCase();    if((fileName.indexOf(".jpg")!=-1)||(fileName.indexOf(".png")!=-1)||(fileName.indexOf(".jpeg")!=-1)||(fileName.indexOf(".bmp")!=-1)||(fileName.indexOf(".gif")!=-1)){   $("#imageUploadForm").submit();      }else{   alert("所選圖片格式錯誤或者不支持此類圖片格式!");   }      return false;  }); });</script> </head><body> <div class="container"> <form enctype="multipart/form-data" method="post" id="imageUploadForm" action="${path}/front/imageUpload" > <span class="btn-upload">  <a href="javascript:void();" rel="external nofollow" class="btn btn-primary radius"><i class="iconfont">󰀠</i> 選擇圖片</a>  <input type="file" name="file" id="file" class="input-file">  <input type="hidden" name="originalImage" value="${imageRelativePath}"/>   </span> </form> <div> <c:if test="${!empty imageRelativePath }">  <img id="image" src="${path }/${imageRelativePath}" alt="Picture"> </c:if> <c:if test="${!empty userico }">  <img id="image" src="${path }/${userico}" alt="Picture"> </c:if> <c:if test="${!empty teachericon }">  <img id="image" src="${path }/${teachericon}" alt="Picture"> </c:if> </div>  <form id="submitForm" action="" method="post">    <input type="hidden" name="originalImage" value="${imageRelativePath}"/>  <input type="hidden" name="icon" id="icon"/> </form> <input class="btn btn-primary size-M radius" type="button" id="button" value="上傳頭像"> <div id="result"></div> </div></body></html>

snippet_file_0.txt

下面是我后臺處理方法,大家可以借鑒一下。后臺是ssm框架,主要是保存圖片和圖片轉碼

//用戶上傳頭像 /** *  * @param image 選擇的圖片 * @param model * @param userId 用戶id * @param userType 用戶類型 * @param request * @param originalImage 上一張臨時圖片 * @return */ @RequestMapping(value="/imageUpload",method=RequestMethod.POST) public String iconImageUpload(@RequestParam(value="file",required=false)MultipartFile image,Model model,@CookieValue("userId")String userId,HttpServletRequest request,String originalImage){ String basePath="image/"; //web.xml里面配置的用戶圖片存儲路徑 String userImagePath=request.getSession().getServletContext().getInitParameter("userImageSavePath"); //圖片相對路徑  String imageRelativePath=FileUtils.fileUpload(image, request,basePath+userImagePath); System.out.println("圖片保存路徑------"+imageRelativePath); System.out.println("上一張臨時圖片------"+originalImage); //刪除上一張臨時圖片 if(originalImage!=null){ String basePathTemp=request.getSession().getServletContext().getRealPath("/"); FileUtils.deleteFile(basePathTemp+originalImage); } model.addAttribute("imageRelativePath", imageRelativePath); model.addAttribute("userId", userId); return "/crop_image";  } //將裁剪好的頭像由base64還原成圖片 @ResponseBody @RequestMapping(value="/saveUserIcon",method=RequestMethod.POST) public Msg saveUserIcon(String icon,@CookieValue("userType")String userType,@CookieValue("userId")String userId,String originalImage,HttpServletRequest request){ System.out.println("icon-----"+icon); //先生成圖片地址 String realpath=request.getSession().getServletContext().getRealPath("/"); String basePath="image/"; String userImagePath=request.getSession().getServletContext().getInitParameter("userImageSavePath"); Calendar now=Calendar.getInstance(); String relativePath=basePath+userImagePath+"/"+now.get(Calendar.YEAR)+"/"+(now.get(Calendar.MONTH)+1)+"/"+now.get(Calendar.DAY_OF_MONTH)+"/"+FileUtils.getUUID()+".png"; String imagePath=realpath+relativePath; //將base64 轉換成圖片 FileUtils.base64ToImage(icon, imagePath); //刪除原圖 if(originalImage!=null){ FileUtils.deleteFile(realpath+originalImage);  } return Msg.success(); } //下面是解碼的方法 public static boolean base64ToImage(String base64, String path) {// 對字節數組字符串進行Base64解碼并生成圖片   if (base64 == null){ // 圖像數據為空    return false;   }   System.out.println(base64);  // base64 的格式為 “data:image/png;base64,****”,逗號之前都是一些說明性的文字,我們只需要逗號之后的就行了  base64=base64.split(",")[1];  BASE64Decoder decoder = new BASE64Decoder();   try {    // Base64解碼    byte[] bytes = decoder.decodeBuffer(base64);    for (int i = 0; i < bytes.length; ++i) {     if (bytes[i] < 0) {// 調整異常數據      bytes[i] += 256;     }    }    // 生成圖片    OutputStream out = new FileOutputStream(path);    out.write(bytes);    out.flush();    out.close();    return true;   } catch (Exception e) {    return false;   }  }

總結

以上所述是小編給大家介紹的使用cropper.js裁剪頭像的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永德县| 建昌县| 岗巴县| 兴山县| 县级市| 丹寨县| 新闻| 义马市| 安西县| 类乌齐县| 清丰县| 伊宁县| 乌鲁木齐县| 云霄县| 湘阴县| 利辛县| 镇沅| 临夏市| 叙永县| 望奎县| 丹阳市| 房山区| 宣汉县| 皋兰县| 嘉义市| 公安县| 富平县| 乐山市| 韶山市| 天等县| 贡嘎县| 容城县| 张家界市| 罗江县| 云安县| 运城市| 云梦县| 永顺县| 邢台县| 深圳市| 淮南市|