`
邦者无敌
  • 浏览: 11645 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Jquery中的Jcrop插件在图片剪裁中的使用

阅读更多

      通过Jcrop可以很好的实现图片剪裁功能。

一.引用的JS和css

<script type="text/javascript" src="../jquery.min.js"></script>
<script type="text/javascript" src="../jcrop/js/jquery.Jcrop.js"></script>
<link rel="stylesheet" href="../jcrop/css/jquery.Jcrop.css" type="text/css"/>
<link rel="stylesheet" href="../css/imgcut.css" type="text/css" />

二.JSP页面中的html元素

编辑图片和预览图片

<div class="image-container" style="text-align:center;width:<%=maxEditWidth%>px;
height:<%=maxEditHeight%>px;overflow:hidden;">
  <img id="target" src="cardGetImgFroTem.action?id=<ww:property value='id'/>"  
	onload="setWandH(<%=maxEditWidth%>,<%=maxEditHeight%>)" />
</div>

<div class="preview-container hide" style="width:<%=maxCutWidth%>px;
height:<%=maxCutHeight%>px;overflow:hidden;">
<img id="preview" src="cardGetImgFroTem.action?id=<ww:property value='id'/>"  
onload="$('#preview').width(this.width);$('#preview').height(this.height)"/>
</div>

 三.页面中的js控制代码

/** 页面加载完即处理:
1.确定按钮绑定单击事件 
2.绑定页面事件:离开即删除临时文件
3.初始化截图框
**/
$(function(){
$('.btn-submit:first').click(function(){
	saveImagecut();
	return false;
});
	
/** 离开页面时删除临时文件 **/
$(window).unload(function(){
	var id = "<ww:property value='id'/>";
	if(id){
		deleteTempFile(id);
	}
});

/** x,y,w,h设置为0初始化未选中 **/
x = 0;
y = 0;
w = 0;
h = 0;
initJcrop();
	
return;
});

 

/** 初始化截图框 **/
function initJcrop(){
	if($('#target').attr('readyState') == 'uninitialized'){
		if(initCount++ > 5){
			alert('照片编辑初始化失败');
		}else{
			setTimeout("initJcrop()", 500);
			return;
		}
	}
	$('#target').Jcrop({
		onChange : updatePreview,
		onSelect: updatePreview,
		aspectRatio: <%=aspectRatio%>
	},function(){
		jcrop = this;
		doesInit = true;
	});
	jcrop.animateTo([52,4,264,286]);
}

 

/** 截图框大小改变时触发事件 **/
function updatePreview(coords) {
	// 储存左上点坐标和截图框宽高
	x = parseInt(coords.x);
	y = parseInt(coords.y);
	w = parseInt(coords.w);
	h = parseInt(coords.h);
	
	// 将缩略图显示出来
	$('.preview-container').show();
	
	var imgWidth = $('#target').width();
	var imgHeight = $('#target').height();
	var rx = 0,ry = 0;
	var width = <%=maxCutWidth%>;
	var height = width / <%=aspectRatio%>;
	if(coords.w != 0){
	 	rx = width / coords.w;
	}
	if(coords.h != 0){
	 	ry = height / coords.h;
	}
	
	$('#preview').css({
		width: Math.round(rx * imgWidth) + 'px',
		height: Math.round(ry * imgHeight) + 'px',
		marginLeft: '-' + Math.round(rx * coords.x) + 'px',
		marginTop: '-' + Math.round(ry * coords.y) + 'px'
	});
};

/** 同步删除临时文件 **/
function deleteTempFile(id) {
	var result = false;
	$.ajax({
		async : false,
		url : 'cardDeleTemFold.action?id=' + id + '&r=' + new Date().getTime(),
		success : function(data){
			// alert("删除临时文件成功");
			var json = $.parseJSON(data);
			if(json.msg == 'success'){
				result = true;
			}else{
				try{
					console.error(json.msg);
				}catch(e) {};
			}
		}
	});
	return true;
}

 

/** 保存截图[处理大小存入数据库] **/
function saveImagecut(){
	var zfId ='<ww:property value="zfId"/>';
	var id = "<ww:property value='id'/>";
	var data = new Object();
	data.x = x == null ? 0 : x;
	data.y = y == null ? 0 : y;
	data.w = w == null ? 0 : w;
	data.h = h == null ? 0 : h;
	var s = data.w*data.h;
	if(!s>0){
		alert("请先裁剪照片,获取预览头像!");
		return;
	}
	// 将已裁剪照片存进已裁剪表后刷新对应父页面的iframe框更新头像
	$.ajax({
		url : 'cardSaveImgToDbtb.action?id=' + id + '&zfId=' + zfId + '&r=' + new Date().getTime(),
		data:data,
		success : function(data){
			var json = $.parseJSON(data);
			if(json.msg == 'success'){
				var ifm = window.opener.document.getElementById("cardListIframe_<ww:property value='zfId'/>");
				var url = ifm.src;
				ifm.src = url;
				id = null;
				$("#saveButton").attr("style","display:none;");
				$("#cancelButton").attr("style","display:true;");
				jcrop.disable();
			}else{
				alert(json.msg);
			}
		}
	});
	$('.preview-container').hide();
	// window.close();
}

 

四.java代码获取、处理、显示image图片流

1.从数据库中获取图片byte[],保存在临时文件夹中。JSP的编辑图片、预览图片底图都是从临时文件夹获取而来。[这也是任何离开处理图片页面的操作都要严格执行删除文件的原因。清理脚手架]

2.从本页面获取剪裁的图片坐标传入处理图片的action。

3.在处理action中,结合编辑图片大小与获取的坐标值,对应成比例的截取临时文件夹中的图片。将新图片保存至数据库中。

4.在显示实际的已裁剪好的页面中,数据库取图片流显示的方式获取已裁剪之后的图片。

五。易错点

1.在图片的处理中容易将某个数据输入输出流忘记关闭,造成内存负载过重;

2.在样式中,我此前漏掉了一个严重的细节。jsp页面报js错误:"auto"未定义。翻遍了页面中的js代码和所引入的.js文件,一无所获。事实证明,是一个.css文件中的auto没有完全注释掉。这里的两个启示是.css文件不能用//来注释。另外一点告诉我们,既然通过js代码能够极大的改观一向由.css文件控制的页面样式风格,那么css自己的不规范也能导致非常严重起初又毫不起眼的js错误。

3.截图框在ie6以上非常清晰漂亮,但是在ie6下边框带有几个累赘不整齐的“木头架子”非常丑陋,没有js错,就是丑。对此很无语,如果各位看到并且已经解决过请一定赐教。

分享到:
评论

相关推荐

    jquery-Jcrop实现图片裁剪截图上传和保存

    1. **jQuery插件**:jQuery Jcrop是一个JavaScript插件,它扩展了jQuery的功能,为图片裁剪提供了一套完整的解决方案。 2. **图像选择**:Jcrop允许用户通过鼠标拖动来选择图片的一部分,创建一个选区,这被称为...

    jQuery图片裁剪插件Jcrop.js

    总之,Jcrop.js是一款强大且易用的图片裁剪插件,它的灵活性和实用性使得它在网页开发中具有广泛的应用价值。无论是个人项目还是企业级应用,Jcrop.js都能帮助开发者轻松实现高质量的图片裁剪功能。

    jquery+Jcrop+servlet图片上传裁剪选择保存实例

    在本文中,我们将深入探讨如何使用jQuery、Jcrop和Servlet技术来实现一个功能完善的图片上传、裁剪和保存实例。这个实例将涵盖前端用户界面的交互、图片处理以及后端服务器的数据交换,帮助开发者理解这一过程中的...

    PHP+jQuery+jCrop裁剪头像

    - `scripts` 文件夹:可能包含项目中的所有JavaScript文件,如jQuery库、jCrop插件以及其他自定义的JS脚本。 6. **安全考虑**:在处理用户上传的图片时,还需要注意防止SQL注入、跨站脚本攻击(XSS)和其他安全...

    跨浏览器的jquery图片剪裁插件Jcrop

    Jcrop是开发者们在网页应用中广泛使用的jQuery图片剪裁插件,它具有高度的跨浏览器兼容性,包括对古老版本如IE6的支持。这个强大的工具为用户提供了一种简便的方式,来选取和裁剪图像,尤其适用于在线图片编辑、头像...

    jQuery图片裁剪插件Jcrop.js.zip

    &lt;... &lt;head&gt; &lt;meta charset="utf-8" /&gt;...jQuery图片裁剪插件Jcrop.js&lt;... Jcrop.js实现的一款功能强大的jQuery图片裁剪插件,可以结合后端程序快速的实现图像裁剪的功能,右侧有3个图像缩略图尺寸可选。

    jQuery图像裁剪插件Jcrop.js.zip

    jQuery图像裁剪插件Jcrop.js是一个用于网页前端的JavaScript库,它允许用户在浏览器上交互式地裁剪图像。这个插件是基于流行的jQuery框架构建的,因此它能够无缝集成到任何使用jQuery的项目中。Jcrop的核心功能是...

    图片裁剪插件JqueryJcrop兼容大数浏览器

    `jQuery Jcrop`是一款强大的JavaScript插件,它使得在浏览器中实现图片裁剪变得简单易行,且具备良好的兼容性,覆盖了大部分主流浏览器。 ### 1. Jquery Jcrop 插件简介 `jQuery Jcrop` 是基于 jQuery 库的一个...

    thinkphp +jquery +Jcrop+ajaxfileupload上传图片并裁剪保存到数据库

    本教程将详细介绍如何使用ThinkPHP框架、jQuery库、Jcrop图像裁剪工具以及AjaxFileUpload插件实现一个无刷新的图片上传和裁剪功能,最后将裁剪后的图片保存到数据库。 首先,`ThinkPHP`是一个流行的PHP框架,它提供...

    基于jquery的图片裁剪插件

    在jQuery生态中,有许多图片裁剪插件可供选择,如Cropper.js、Jcrop等。这些插件通常具有良好的浏览器兼容性,支持主流的Chrome、Firefox、Safari、Edge以及IE9+。兼容性是选择插件时的重要考量因素,确保用户在各种...

    jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享

    - 使用jcrop插件初始化裁剪操作,设置裁剪比例。 - 用户通过jcrop界面裁剪图片后,获取裁剪区域的坐标和尺寸。 - 根据裁剪的坐标和尺寸对图片进行实际的裁剪,并展示裁剪后的结果。 - 最后,当用户确认裁剪结果后,...

    Jcrop官方的图片裁剪jQuery插件

    Jcrop是一款基于jQuery的开源图片裁剪插件,它为Web开发者提供了在浏览器端实现图片裁剪功能的强大工具。这款插件广泛应用于各种需要用户自定义选择图片区域的场景,如上传头像、图片预览和编辑等。下面将详细介绍...

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

    在图片预览和剪切功能中,`jQuery`起到了关键作用,通过其强大的选择器和API,可以轻松地获取和操作DOM元素,实现页面动态效果。 `jCrop`是`jQuery`的一个插件,专门用于图像裁剪。它提供了一种直观、用户友好的...

    jQuery Jcrop 实现图像裁剪实例

    在本文中,我们将深入探讨如何使用jQuery Jcrop插件实现图像裁剪功能。Jcrop是一款强大的JavaScript库,它为Web应用程序提供了用户友好的图像选择和裁剪工具。这个实例将帮助开发者理解Jcrop的工作原理,并指导如何...

    好用的JS图片裁剪工具——jquery.Jcrop-0.9.8

    确保它们被正确地链接到页面,以便在需要裁剪的图像元素上应用Jcrop插件。 ```html &lt;script src="jquery.js"&gt; &lt;script src="Jcrop.js"&gt; &lt;link rel="stylesheet" href="jcrop.css" /&gt; ``` ### 2. **Jcrop初始化** ...

    Jcrop插件对图片进行裁剪示例

    在本示例中,我们将深入探讨如何结合Jcrop与Java技术,实现一个完整的图片裁剪功能。 首先,Jcrop的核心在于它的交互性和灵活性。用户可以通过鼠标拖动来选择图片上的任意部分,其选定区域可以自适应图像大小,支持...

    PHP+jQuery+jCrop在线上传裁剪头像(内含源码)

    在头像上传裁剪应用中,jQuery用于处理前端的用户交互,例如监听文件选择事件、发起Ajax请求将图片数据发送到服务器,以及接收裁剪参数并更新显示的预览图像。 3. **jCrop**: jCrop是jQuery的一个插件,专门用于...

    jquery Jcrop图像裁切插件中文api文档

    jQuery Jcrop 图像裁切插件是一个非常实用的工具,用于在Web应用程序中实现动态的图像裁剪功能。它依赖于jQuery库,提供了一个简单易用的API,使得开发者能够轻松地集成图像裁剪功能。以下是对Jcrop关键知识点的详细...

    jQuery Jcrop图像裁剪的插件结合java后台实现图片裁剪的功能

    jQuery Jcrop是一个在前端广泛应用的JavaScript插件,专门用于实现图像裁剪功能。它与后端技术如Java相结合,能够为Web应用提供完整的图片处理解决方案。Jcrop的强大之处在于其简单易用的API,允许开发者轻松地将...

    Jcrop 基于jquery的图片裁剪插件.zip

    Jcrop是一款基于jQuery的图片裁剪插件,它允许用户在网页上自由选择图像的裁剪区域,从而实现自定义的图像裁剪功能。这款插件广泛应用于网站上的头像上传、图片预览和编辑等领域,为用户提供了一种简单易用的交互...

Global site tag (gtag.js) - Google Analytics