cropper.js 로 두상 을 자 르 는 인 스 턴 스 코드 를 사용 합 니 다.
10233 단어 cropper.js재단 하 다.
먼저 완성 도 를 넣 습 니 다:
다음은 앞 뒤 코드 를 드 리 겠 습 니 다.
전단 페이지 는 단독 jsp 페이지 로 팝 업 층 으로 그림 을 자 르 는 것 이 좋 습 니 다.
jsp 페이지 에서 인용 한 두 개의 cropper 에 관 한 파일 을 제공 하지 않 겠 습 니 다.여러분 이 필요 로 하 는 것 은 공식 github 에 가서 다운로드 할 수 있 습 니 다.
주소
<%@ 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;
}
}
총결산위 에서 말 한 것 은 크 로 퍼 제 이 스 를 사용 하여 두상 을 재단 하 는 인 스 턴 스 코드 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.작은 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
cropper.js 로 두상 을 자 르 는 인 스 턴 스 코드 를 사용 합 니 다.최근 프로젝트 는 프로필 컷 기능 이 필요 하 다.인터넷 에서 찾 아 보 니 github 의 cropper 프로젝트 가 괜 찮 은 것 을 발견 하고 참고 했다.사용 하기 가 매우 간단 하 다.다음은 내 가 만 든 작...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.