Jcrop简单实用
今天有一个项目的功能需求 “在上传照片的时候能进行裁剪”,网上找了下,发现有Jcrop这款插件,自己试了下,感觉很不错,蛮好用的。又能增加用户体验,测试了兼容性也很好,所以在这里分享下
首先,可以到官网上下载这款插件htttp://www.jquery.com,下载后有需要的话可以看下里面的demo
在项目中,只要在head中引用
<link href="jquery.Jcrop.css" rel="stylesheet" type="text/css" />
<script src="jquery-1.7.1.js" type="text/javascript"></script>
<script src="jquery.Jcrop.js" type="text/javascript"></script>
前台页面,要加上4个隐藏域,分别记录剪切后的x,y坐标和长,宽。附上代码
<div>
<!--需要剪切的图片-->
<img src="gq_nav.jpg" alt="" id="TestImage" style="float: left;">
</div>
<form id="AvatarForm" action="">
<input id="x" name="x" type="hidden"/>
<input id="y" name="y" type="hidden"/>
<input id="w" name="w" type="hidden"/>
<input id="h" name="h" type="hidden"/>
<input class="input_btn" id="BtnSaveAvatar" value="确定保存" type="submit"/>
</form>
<!--简介后显示的图片-->
<img id="CutImage" />
接着实例化Jcrop
<script>
$(document).ready(function () {
$('#TestImage').Jcrop({
onChange: updateCoords,
onSelect: updateCoords
});
$("#BtnSaveAvatar").click(function () {
$.ajax({
url: 'Handler.ashx',
data: { 'x': $("#x").val(), 'y': $("#y").val(), 'w': $("#w").val(), 'h': $("#h").val() },
datatype: "text/json",
type: 'post',
success: function (imgUrl) {
$("#CutImage").attr("src", imgUrl);
}
});
return false;
});
});
function updateCoords(c) {
$('#x').val(c.x);
$('#y').val(c.y);
$('#w').val(c.w);
$('#h').val(c.h);
};
</script>
之后看下运行效果图
好了,效果出来了,然后要保存截取后的图片了,这样在刚刚的脚本中可以看到用ajax提交到Handler.ashx上去处理,附上代码
public void ProcessRequest(HttpContext context)
{ //接收位置x,y。
//接收长宽w,h。
string xstr = context.Request["x"];
string ystr = context.Request["y"];
string wstr = context.Request["w"];
string hstr = context.Request["h"];
//获取原始图片
string sourceFile = context.Server.MapPath("gq_nav.jpg");
//图片路径
string savePath = "CutImage/" + Guid.NewGuid() + ".jpg";
int x = ;
int y = ;
int w = ;
int h = ;
try
{
x = int.Parse(xstr);
y = int.Parse(ystr);
w = int.Parse(wstr);
h = int.Parse(hstr);
}
catch { }
ImageCut ic = new ImageCut(x, y, w, h);
System.Drawing.Bitmap cuted = ic.KiCut(new System.Drawing.Bitmap(sourceFile));
string cutPath = context.Server.MapPath(savePath);
cuted.Save(cutPath, System.Drawing.Imaging.ImageFormat.Jpeg);
context.Response.Write(savePath); //输出保存的路径,以便页面端接收路径显示切割后的图片
}
在Handler.ashx中可以看到生成新的图片是交给ImageCut这个类去做的,这里也附上代码
public class ImageCut
{
///<summary>
/// 剪裁 -- 用GDI+
///</summary>
///<param name="b">原始Bitmap</param>
///<param name="StartX">开始坐标X</param>
///<param name="StartY">开始坐标Y</param>
///<param name="iWidth">宽度</param>
///<param name="iHeight">高度</param>
///<returns>剪裁后的Bitmap</returns>
public Bitmap KiCut(Bitmap b)
{
if (b == null)
{
return null;
} int w = b.Width;
int h = b.Height; if (X >= w || Y >= h)
{
return null;
} if (X + Width > w)
{
Width = w - X;
} if (Y + Height > h)
{
Height = h - Y;
} try
{
Bitmap bmpOut = new Bitmap(Width, Height, PixelFormat.Format24bppRgb); Graphics g = Graphics.FromImage(bmpOut);
g.DrawImage(b, new Rectangle(, , Width, Height), new Rectangle(X, Y, Width, Height), GraphicsUnit.Pixel);
g.Dispose(); return bmpOut;
}
catch
{
return null;
}
} public int X = ;
public int Y = ;
public int Width = ;
public int Height = ;
public ImageCut(int x, int y, int width, int heigth)
{
X = x;
Y = y;
Width = width;
Height = heigth;
}
}
这样就可以实现在线剪裁图片的效果了。因为觉得这款插件还算不错,所以特此分享下,希望大师们不要取笑,如果哪位有更好的建议或其他类似的插件,也希望
能分享给小弟。
另:附上这个插件的属性
| allowSelect | true | 允许新选框 |
| allowMove | true | 允许选框移动 |
| allowResize | true | 允许选框缩放 |
| trackDocument | true | |
| baseClass | “jcrop” | 基础样式名前缀。说明:class=”jcrop-holder”,更改的只是其中的 jcrop。 |
| addClass | null | 添加样式。例:假设值为 “test”,那么会添加样式到 |
| bgColor | “black” | 背景颜色。颜色关键字、HEX、RGB 均可。 |
| bgOpacity | 0.6 | 背景透明度 |
| bgFade | false | 使用背景过渡效果 |
| borderOpacity | 0.4 | 选框边框透明度 |
| handleOpacity | 0.5 | 缩放按钮透明度 |
| handleSize | 9 | 缩放按钮大小 |
| handleOffset | 5 | 缩放按钮与边框的距离 |
| aspectRatio | 0 | 选框宽高比。说明:width/height |
| keySupport | true | 支持键盘控制。按键列表:上下左右(移动)、Esc(取消)、Tab(跳出裁剪框,到下一个) |
| cornerHandles | true | 允许边角缩放 |
| sideHandles | true | 允许四边缩放 |
| drawBorders | true | 绘制边框 |
| dragEdges | true | 允许拖动边框 |
| fixedSupport | true | |
| touchSupport | null | |
| boxWidth | 0 | 画布宽度 |
| boxHeight | 0 | 画布高度 |
| boundary | 2 | 边界。说明:可以从边界开始拖动鼠标选择裁剪区域 |
| fadeTime | 400 | 过度效果的时间 |
| animationDelay | 20 | 动画延迟 |
| swingSpeed | 3 | 过渡速度 |
| minSelect | [0,0] | 选框最小选择尺寸。说明:若选框小于该尺寸,则自动取消选择 |
| maxSize | [0,0] | 选框最大尺寸 |
| minSize | [0,0] | 选框最小尺寸 |
| onChange | function(){} | 选框改变时的事件 |
| onSelect | function(){} | 选框选定时的事件 |
| onRelease | function(){} | 取消选框时的事件 |
API 接口
| 名称 | 说明 |
|---|---|
| setImage(string) | 设定(或改变)图像。例:jcrop_api.setImage(“newpic.jpg”) |
| setOptions(object) | 设定(或改变)参数,格式与初始化设置参数一样 |
| setSelect(array) | 创建选框,参数格式为:[x,y,x2,y2] |
| animateTo(array) | 用动画效果创建选框,参数格式为:[x,y,x2,y2] |
| release() | 取消选框 |
| disable() | 禁用 Jcrop。说明:已有选框不会被清除。 |
| enable() | 启用 Jcrop |
| destroy() | 移除 Jcrop |
| tellSelect() | 获取选框的值(实际尺寸)。例子:console.log(jcrop_api.tellSelect()) |
| tellScaled() | 获取选框的值(界面尺寸)。例子:console.log(jcrop_api.tellScaled()) |
| getBounds() | 获取图片实际尺寸,格式为:[w,h] |
| getWidgetSize() | 获取图片显示尺寸,格式为:[w,h] |
| getScaleFactor() | 获取图片缩放的比例,格式为:[w,h] |
Jcrop简单实用的更多相关文章
- jQuery的几种简单实用效果
许久未分享博客,或许已生疏. 闲来无事, 分享几个jQuery简单实用的效果案例 不喜勿喷... 1.页面常用的返回顶部 <!DOCTYPE html> <html lang=&qu ...
- 经验分享:10个简单实用的 jQuery 代码片段
尽管各种 JavaScirpt 框架和库层出不穷,jQuery 仍然是 Web 前端开发中最常用的工具库.今天,向大家分享我觉得在网站开发中10个简单实用的 jQuery 代码片段. 您可能感兴趣的相 ...
- 简单实用的PHP防注入类实例
这篇文章主要介绍了简单实用的PHP防注入类实例,以两个简单的防注入类为例介绍了PHP防注入的原理与技巧,对网站安全建设来说非常具有实用价值,需要的朋友可以参考下 本文实例讲述了简单实用的PHP防注 ...
- php简单实用的操作文件工具类(创建、移动、复制、删除)
php简单实用好用的文件及文件夹复制函数和工具类(创建.移动.复制.删除) function recurse_copy($src,$dst) { // 原目录,复制到的目录 $dir = opend ...
- 基于Bootstrap简单实用的tags标签插件
http://www.htmleaf.com/jQuery/ jQuery之家 自由分享jQuery.html5和css3的插件库 基于Bootstrap简单实用的tags标签插件
- C#_简单实用的翻页
简单实用的生成翻页HTML辅助类 C# using System.Text; namespace ClassLibrary { /// <summary> /// /// </sum ...
- 简单实用的Windows命令(一)
前几天新买了一台笔记本电脑,使用了一下几个简单的查看电脑配置的命令,觉得非常的不错,在此记录一下 一:运行命令的方式有两种 1:使用快捷键WIN+R,然后在弹出的“运行”对话框中输入对应的命令 2:在 ...
- 简单实用的Windows命令(二)
昨天简单的记录了几个非常简单实用的Windows命令,不过我又想起来还有两个我在实际的工作中也是经常用到的命令——PING和IPCONFIG,不过我在工作中的使用都是非常简单的,用PING命令检测对应 ...
- iOS边练边学--多线程介绍、NSThread的简单实用、线程安全以及线程之间的通信
一.iOS中的多线程 多线程的原理(之前多线程这块没好好学,之前对多线程的理解也是错误的,这里更正,好好学习这块) iOS中多线程的实现方案有以下几种 二.NSThread线程类的简单实用(直接上代码 ...
随机推荐
- Apache shiro之身份验证(登陆)流程
从张开涛blog学习后整理:http://jinnianshilongnian.iteye.com/blog/2018398 上图中的类和接口都可以继承和实现来个性化自己的实现. 其中重点看一下Mod ...
- Eclipse shortcuts
Editor Shortcut Description Alt + / Content assist. A great help for our coding. Ctrl + Shift + F Fo ...
- android Camera 结构
Java层 :Frameworks\base\core\java\android\hardware\Camera.java JNI: Frameworks\base\core\jni\android_ ...
- android 打包流程
.使用Android SDK提供的aapt.exe生成R.java类文件 .使用Android SDK提供的aidl.exe把.aidl转成.java文件(如果没有aidl,则跳过这一步) .使用JD ...
- 【Math】余弦相似度 和 Pearson相关系数
http://cucmakeit.github.io/2014/11/13/%E4%BF%AE%E6%AD%A3%E4%BD%99%E5%BC%A6%E7%9B%B8%E4%BC%BC%E5%BA%A ...
- LoadRunner执行过程报错“Failed to connect to server "xxx.xxx.xxx.xxx:xx":[10060] connetion time out”
执行性能测试过程中,LR报错: Action.c(6):Error -27796: Failed to connect to server "xxx.xxx.xxx.xxx:xx" ...
- [亿能测试_www.gdtesting.com]测试技术资料网盘共享
[亿能测试_www.gdtesting.com]测试技术资料网盘共享: http://pan.baidu.com/share/home?uk=974090852
- NFS挂载Android文件系统
NFS挂载Android文件系统 [日期:2012-02-14] 来源:Linux社区 作者:cjok376240497 [字体:大 中 小] 1.安装NFS服务 $sudo apt-get ...
- HDU 3999 The order of a Tree
The order of a Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- Qt 添加资源文件
*本人乃小白,博文主要用于个人记录,不保证内容准确无误* 我们编写的gui可能需要一些额外的资源(比如贴图用的图片),可用资源文件统一管理.以下以图片为例. 用qt creator 打开工程,为工程新 ...