`
liuguofeng
  • 浏览: 450253 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

spring mvc 使用jcrop进行头像剪切

    博客分类:
  • Java
 
阅读更多
源码下载地址:http://download.csdn.net/detail/liuguofeng719/8029603
公司直接可以拿来使用


package com.fileupload.rest;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.coobird.thumbnailator.Thumbnails;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

@Controller
public class ClipAvatarCotroller {

	@RequestMapping(value = "/clipUpload")
	public void clipUpload(HttpServletRequest request, HttpServletResponse response) {
		String pathString = request.getRealPath("/");
		MultipartHttpServletRequest mhr = (MultipartHttpServletRequest) request;
		MultipartFile file = mhr.getFile("file");
		try {
			byte[] byt = file.getBytes();
			File f = new File(pathString + File.separator + "upload");
			if (!f.exists())
				f.mkdirs();
			FileOutputStream fis = new FileOutputStream(f.getPath() + File.separator + file.getOriginalFilename());
			fis.write(byt);
			fis.flush();
			fis.close();
			response.getOutputStream().print("/upload/" + file.getOriginalFilename());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	@RequestMapping(value = "/crop_form")
	public void crop_form(HttpServletRequest request, HttpServletResponse response) {
		int x = Integer.valueOf(request.getParameter("x"));
		int y = Integer.valueOf(request.getParameter("y"));
		int w = Integer.valueOf(request.getParameter("w"));
		int h = Integer.valueOf(request.getParameter("h"));
		String fileName = request.getParameter("fileName");
		String fileString = fileName.substring(fileName.lastIndexOf("\\") + 1);
		String pathString = request.getRealPath("/");
		File f = new File(pathString + File.separator + "clip");
		if (!f.exists())
			f.mkdirs();
		try {
			File f1 = new File(pathString + File.separator + "upload");
			InputStream is = new FileInputStream(f1.getPath() + File.separator + fileString);
			BufferedImage bufferImage = ImageIO.read(is);
			//获取原图的宽和高
			int srcWidth = bufferImage.getWidth();
			int srcHeight = bufferImage.getHeight();
			//X*原图宽/显示需要展示图片框的宽
			//Y*原图高/显示需要展示图片框的高
			//W*原图宽/显示需要展示图片框的宽
			//H*原图高/显示需要展示图片框的高
			//400 * 270 
//			<div class="bigImg" style="float: left;">
//				<img id="srcImg" src="" width="400px" height="270px" />
//			</div>
			int x1 = x * srcWidth / 400;
			int y1 = y * srcHeight / 270;
			int w1 = w * srcWidth / 400;
			int h1 = h * srcHeight / 270;
			Thumbnails.of(bufferImage).sourceRegion(x1, y1, w1, h1).size(w, h).keepAspectRatio(false).toFile(
					f.getPath() + File.separator + UUID.randomUUID().toString().replaceAll("-", "") + ".jpg");
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}

 

 

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>裁剪Demo</title>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<link rel="stylesheet" type="text/css"
			href="<%=request.getContextPath()%>/css/jquery.Jcrop.css">
		<script src="<%=request.getContextPath()%>/js/jquery.min.js"></script>
		<script src="<%=request.getContextPath()%>/js/jquery.Jcrop.min.js"></script>
		<style>
			
			.jcrop-holder #preview_box {
			  display: block;
			  position: absolute;
			  z-index: 2000;
			  top: 10px;
			  right: -280px;
			  padding: 6px;
			  border: 1px rgba(0,0,0,.4) solid;
			  background-color: white;
			  -webkit-border-radius: 6px;
			  -moz-border-radius: 6px;
			  border-radius: 6px;
			  -webkit-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2);
			  -moz-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2);
			  box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2);
			}
		
			#preview_box .preview-container {
			  width: 200px;
			  height: 200px;
			  overflow: hidden;
			}
			
		</style>
		<script>
			var jcrop_api,boundx,boundy;
			$(function(){
				$("#iframe-hidden").bind("load",function(){
					var imgpath = $("#iframe-hidden").contents().find("pre").text();
					$("#srcImg").attr("src","."+imgpath);
					$("#previewImg").attr("src","."+imgpath);
					cutImage();
				});
			});
			//裁剪图像
			function cutImage(){
				$("#srcImg").Jcrop( {
					aspectRatio : 1,
					onChange : showCoords,
					onSelect : showCoords,
					minSize :[200,200]
				},function(){
			      // Use the API to get the real image size
			      var bounds = this.getBounds();
			      boundx = bounds[0];
			      boundy = bounds[1];
			      // Store the API in the jcrop_api variable
			      jcrop_api = this;
			      // Move the preview into the jcrop container for css positioning
			      //$preview.appendTo(jcrop_api.ui.holder);
			    });
				//简单的事件处理程序,响应自onChange,onSelect事件,按照上面的Jcrop调用
				function showCoords(obj) {
					$("#x").val(obj.x);
					$("#y").val(obj.y);
					$("#w").val(obj.w);
					$("#h").val(obj.h);
					
					if (parseInt(obj.w) > 0) {
						//计算预览区域图片缩放的比例,通过计算显示区域的宽度(与高度)与剪裁的宽度(与高度)之比得到
						var rx = $("#preview_box .preview-container").width() / obj.w;
						var ry = $("#preview_box .preview-container").height() / obj.h;
						//通过比例值控制图片的样式与显示
						$("#previewImg").css( {
							width : Math.round(rx * boundx) + "px", //预览图片宽度为计算比例值与原图片宽度的乘积
							height : Math.round(ry * boundy) + "px", //预览图片高度为计算比例值与原图片高度的乘积
							marginLeft : "-" + Math.round(rx * obj.x) + "px",
							marginTop : "-" + Math.round(ry * obj.y) + "px"
						});
					}
				}
			}
			function changeFile(){
				var file = $("#fName").val();
				$("#fileName").val(file);
			}
		</script>
	</head>
	<body>
		<form method="post" action="clipUpload" enctype="multipart/form-data"
			target="iframe-hidden">
			<input type="text" name="name" />
			<input type="file" name="file" id="fName" onchange="changeFile(this)"/>
			<input type="submit" />
		</form>
		<iframe id="iframe-hidden" name="iframe-hidden" style="display:none;"></iframe>
		<div id="cutImage">
			<div class="bigImg" style="float: left;">
				<img id="srcImg" src="" width="400px" height="270px" />
			</div>
			<div id="preview_box">
			    <div class="preview-container">
			      <img id="previewImg" src="" class="jcrop-preview" alt="Preview" />
			    </div>
			</div>
			<div>
				<form action="crop_form" method="post" id="crop_form">
					<input type="hidden" id="bigImage" name="bigImage" />
					<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" />
					<input type="hidden" id="fileName" name="fileName" />
					<p>
						<input type="submit" value="确认" id="crop_submit" />
					</p>
				</form>
			</div>
		</div>
	</body>
</html>

 源代码下载地址:

分享到:
评论

相关推荐

    spring mvc thumbnailator +jcrop 实现头像裁剪

    本项目以"Spring MVC Thumbnailator + Jcrop 实现头像裁剪"为主题,旨在提供一种高效且直观的用户头像裁剪解决方案。这个项目可以直接应用于你的应用开发中,无需从零开始搭建相关功能。 首先,Spring MVC 是一个...

    struts2加jquery加Jcrop实现头像剪切上传项目版(添加jar包部署就可以运行)

    总的来说,这个项目提供了一个完整的流程,从用户选择并裁剪图片,到使用Struts2和Spring处理上传,再到后端进行实际的图片处理。开发者可以通过学习和实践这个项目,掌握Web应用中的图像上传和处理技术,特别是...

    struts2加jquery加Jcrop实现头像剪切上传

    自己通过ajaxfileupload.js结合struts2实现图片上传文件,并通过jcrop和java图像处理功能实现了图片剪切的功能。该功能效果和新浪QQ的头像上传功能效果一样,在ie下可以正常使用 火狐下更换图片时效果样式会走形

    Jcrop ssh 头像上传前后台

    在头像上传中,Spring MVC处理HTTP请求,将用户选择的图片数据转发到相应的服务层进行处理,并返回结果。 - **Hibernate**:是一个对象关系映射(ORM)框架,简化了数据库操作。在头像上传的场景下,Hibernate可以...

    Jsp + JCrop 上传头像预览并剪切

    "Jsp + JCrop 上传头像预览并剪切"是一个基于Java服务器页面(JSP)和JCrop插件的解决方案,它允许用户上传头像并在上传前进行预览和剪裁,从而提供更优质的交互体验。以下将详细介绍这一技术实现的关键知识点。 1....

    jcrop图片剪切工具

    **Jcrop图片剪切工具详解** Jcrop是一款强大的JavaScript图片裁剪库,它允许用户在前端自由地选择和裁剪图片,广泛应用于网页中的图片预览、上传前的裁剪等场景。这款工具以其直观的用户界面和灵活的配置选项,深受...

    使用JCrop 截取头像包含了后台处理代码 asp net c#

    2.使用了JCrop插件 3.可以选择背景色 4.控制选择框为1:1的比例 5.设置了选择框的最大范围和最小范围 6.可以支持键盘上下左右箭头移动 7.可以切换图片上传到服务器后截取图片并返回客户端 8.图片上传是无刷新上传的"&gt;...

    PHP+jQuery+jCrop裁剪头像

    在本项目中,“PHP+jQuery+jCrop裁剪头像”是一个常见的在线图像处理应用场景,用于让用户自定义上传的头像尺寸,以满足特定的显示需求。以下是对该项目中涉及的关键技术点的详细解释: 1. **PHP**:PHP(Hypertext...

    node.js(express)中使用Jcrop进行图片剪切上传功能

    最近在项目开发中遇到了这样的需求就是要实现用户上传头像,并且要保存用户裁切后的部分作为用户头像。下面给大家分享node.js(express)中使用Jcrop进行图片剪切上传功能,需要的的朋友参考下吧

    jcrop实现剪切上传图片

    在本文中,我们将深入探讨如何使用Jcrop实现剪切上传图片以及相关的操作实例。 首先,Jcrop是基于jQuery库的,因此在使用Jcrop之前,你需要确保你的项目中已经引入了jQuery。你可以通过CDN或者本地文件的方式引入...

    使用Jcrop.js和jQuery.form.js,用ImageIO等进行头像上传缩放及裁剪

    使用Jcrop.js和jQuery.form.js,用ImageIO等进行头像上传缩放及裁剪 http://blog.csdn.net/recordme/article/details/42550703

    基于jquery Jcrop的头像编辑器封装版.zip

    【标题】"基于jquery Jcrop的头像编辑器封装版.zip"是一个压缩包,其中包含了一个使用jQuery库和Jcrop插件实现的头像编辑工具的封装版本。这个工具允许用户在网页上自由裁剪图片,以适应各种应用场景,如个人头像、...

    头像剪切上传jquery+java源码

    头像的剪切功能可能采用了jQuery的插件,如`cropper.js`或`jcrop`,这些插件能够提供图像的选取和裁剪功能,允许用户自由调整选取区域,然后将裁剪后的图像数据发送到服务器。 在`uploadimage.jsp`页面中,HTML元素...

    给于jcrop图片剪切上传

    $('#target').Jcrop({ minSize: [190,190], //边框最小尺寸 //maxSize:[190,190], setSelect: [0,0,170,230], //创建边框参数【x,y,x1,y1】 onChange: updatePreview, //边框改变时发生的事件 onSelect: ...

    Jcrop图片剪切

    【Jcrop图片剪切】是一种基于JavaScript的图片裁剪库,它允许用户在网页上自由选择图片的裁剪区域,从而实现自定义的图片尺寸调整。Jcrop是轻量级的,易于集成到任何Web项目中,尤其适用于需要提供用户交互式图片...

    jquery头像截取jcrop

    `jQuery jCrop` 就是一个这样的工具,它允许用户在上传图片前进行自由裁剪,确保上传的头像符合特定的尺寸要求。 ### 一、jCrop简介 `jCrop` 是一个基于jQuery的图像裁剪插件,它可以与HTML5的`...

    PHP+Jcrop+ajaxfileupload头像上传

    6. 用户界面:前端部分需要一个友好的用户界面,让使用者能够方便地选择和裁剪头像。Jcrop提供了丰富的配置选项,可以定制裁剪工具的外观和行为,以适应不同设计需求。 7. 数据持久化:上传的头像通常需要关联到...

    jsp+jquery(jcrop)实现的图片预览剪切上传

    本项目结合了这两者,并引入了`jCrop`插件,实现了图片预览、剪切和上传的功能,对于用户友好的图像管理界面有着重要的意义。 `jsp`是基于Java的服务器端脚本语言,它允许开发者在HTML页面中嵌入Java代码,从而动态...

    jcrop做一个上传头像

    标题中的"jcrop做一个上传头像"指的是使用Jcrop这个JavaScript库来实现用户上传图片并进行裁剪的功能。Jcrop是一款强大的图像裁剪工具,它允许用户在网页前端选择并裁剪图片,然后将裁剪的坐标信息发送到后台服务器...

Global site tag (gtag.js) - Google Analytics