今天要给大家介绍一个asp.net结合jQuery来切割图片的小程序,原理很简单,大致流程是:

加载原图 --> 用矩形框在原图上选取区域并将选取的顶点坐标和矩形尺寸发送至服务器 --> 由服务器切割原图并输出切割后的图片。下面我们就分别对这几个步骤详细展开讨论分析,并在最后附上小demo供大家参考。

1、在页面上加载原图

这个就不用多说了,就是在页面上显示一张图片,一个img标签搞定不过为了下一步演示,还是贴一下代码

<img src="girl.jpg" kesrc="girl.jpg" alt="" id="TestImage" style="float: left;">

2、用矩形框在原图上选取区域

这个我们要用到一个jQuery插件Jcrop,感谢Jcrop,其项目页面地址:http://deepliquid.com/content/Jcrop.html

再次感谢。接下来就是运用这个插件来让我们能在原图上随意地切图,先在页面上放几个隐藏域,用来存放当前选取的顶点坐标及选取矩形的尺寸,代码如下:

<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>

四个隐藏域分别表示x:左上顶点x坐标;y:左上顶点y坐标;w:选取矩形宽度;h:选取矩形长度。
然后我们调用插件,做好初始化工作,引入js和css文件:

<script type="text/javascript" src="js/jquery.js" kesrc="js/jquery.js"></script>

<script type="text/javascript" src="js/Jcrop/js/jquery.Jcrop.js" kesrc="js/Jcrop/js/jquery.Jcrop.js"></script>

<link rel="stylesheet" href="js/Jcrop/css/jquery.Jcrop.css" kesrc="js/Jcrop/css/jquery.Jcrop.css" type="text/css">

初始化原图的js代码:

$(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(o){ window.location.href="result.aspx?url="+o;}    //成功后跳转到result页面查看切割后图片,把url

});

return false;

});

});

function updateCoords(c){

$('#x').val(c.x);

$('#y').val(c.y);

$('#w').val(c.w);

$('#h').val(c.h);

};

经过上述步骤,我们很高兴的看到一位美女出现在我们眼前,并任由我们选取任何部位,很刺激吧,由于demo在最后,先在这截一张效果图吧

3、服务器端切割图片并输出切割后的图片:

切割图片的主要类代码如下:

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(0, 0, Width, Height), new Rectangle(X, Y, Width, Height), GraphicsUnit.Pixel);

g.Dispose();

return bmpOut;

}

catch

{

return null;

}

}

public int X = 0;

public int Y = 0;

public int Width = 120;

public int Height = 120;

public ImageCut(int x, int y, int width, int heigth)

{

X = x;

Y = y;

Width = width;

Height = heigth;

}

}

在Handler.ashx中如下调用来切割并输出:

public void ProcessRequest (HttpContext context) {

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("girl.jpg");

string savePath = "CutImage/" + Guid.NewGuid() + ".jpg";

int x = 0;

int y = 0;

int w = 1;

int h = 1;

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);    //输出保存的路径,以便页面端接收路径显示切割后的图片

}

最后我们在Result.aspx页面上接收切割后的图片路径并显示切割后的图片:

<img src="<%=Request["url"] %>" alt="" />

好了,整个过程就完成了,为了大家能更好的参考学习,下面附上小demo,点击下载

支持原创的同学果断要支持一下本文,欢迎大家转载本文。

在asp.net中使用jQuery实现类似QQ网站的图片切割效果的更多相关文章

  1. 在 ASP.NET 中使用 jQuery.load() 方法

    今天就让我们看看在 ASP.NET 中使用 jQuery.load() 方法来调用 ASP.NET 的方法,实现无刷新的加载数据. 使用 jQuery 的朋友应该知道可以使用 jQuery.load( ...

  2. 在asp.net中使JQuery的Ajax用总结

    自从有了JQuery,Ajax的使用变的越来越方便了,但是使用中还是会或多或少的出现一些让人短时间内痛苦的问题.本文暂时总结一些在使用JQuery Ajax中应该注意的问题,如有不恰当或者不完善的地方 ...

  3. ASP.NET中使用jQuery插件实现图片幻灯效果

    参照网上的资料及提供的jQuery插件实现图片幻灯效果. 1.页面前台代码: //头部引用 <head runat="server"><title>< ...

  4. jQuery的鼠标悬停时放大图片的效果

    这是一个基于jQuery的效果,当鼠标在小图片上悬停时,会弹出一个大图,该大图会跟随鼠标的移动而移动.这个效果最初源于小敏同志的一个想法,刚开始做的时候只能实现弹出的图片是固定的,不能随鼠标移动,最后 ...

  5. 基于jQuery的鼠标悬停时放大图片的效果制作

    这是一个基于jQuery的效果,当鼠标在小图片上悬停时,会弹出一个大图,该大图会跟随鼠标的移动而移动.这个效果最初源于小敏同志的一个想法,刚开始做的时候只能实现弹出的图片是固定的,不能随鼠标移动,最后 ...

  6. 一款由jQuery实现的手风琴式相册图片展开效果

    之前我们有分享过很多jQuery手风琴样式的菜单,比如CSS3手风琴下拉菜单.今天要分享的jQuery手风琴效果很特别,它是手风琴样式的相册图片展开效果.我们只需点击图片缩略图即可展开当前的图片,并将 ...

  7. asp.net 中使用JQuery Ajax 上传文件

    首先创建一个网页,网页中添加如下代码. <h3>Upload File using Jquery AJAX in Asp.net</h3> <table> < ...

  8. asp.net中应用JQuery.pagination分页

    JQuery.pagination这款分页控件非常好用,可实现无刷新分页,为了方便下次做项目便于拷贝,所以在此发布一下,具体的实现流程如下: 效果图: JQuery.pagination的各个参数的说 ...

  9. ASP.Net中通过Jquery前端对Repeater控件绑定的数据进行操作

    说明:由于Repeater控件是动态绑定,通过Id获取数据只能默认获取第一行: 1.对Repeater中div设置样式 2.通过$(".css").each(function(){ ...

随机推荐

  1. 四、django rest_framework源码之频率控制剖析

    1 绪言 权限判定之后的下一个环节是访问频率控制,本篇我们分析访问频率控制部分源码. 2 源码分析 访问频率控制在dispatch方法中的initial方法调用check_throttles方法开始. ...

  2. Python 中的面向对象和异常处理

    在之前我们已经说过了 Python 中内置的主要的几种对象类型,(数,字符串,列表,元组和字典).而面向对象的核心人物还没出场呢 .那么我们常说的对象是什么类型的呢,其实他的类型就是“类”.继承封装和 ...

  3. Alter GDG limit

    //JOBCARD... //*-------------------------------------------------------------------* //* Alter GDG l ...

  4. iOS Sprite Kit教程之滚动场景

    iOS Sprite Kit教程之滚动场景 滚动场景 在很多的游戏中,场景都不是静止的,而是滚动的,如在植物大战僵尸的游戏中,它的场景如图2.26所示. 图2.26  植物大战僵尸 在图2.26中,用 ...

  5. 1007 Maximum Subsequence Sum (25)(25 point(s))

    problem Given a sequence of K integers { N~1~, N~2~, ..., N~K~ }. A continuous subsequence is define ...

  6. Javascript中call方法和apply方法用法和区别

    第一次在博客园上面写博客,知识因为看书的时候发现了一些有意思的知识,顺便查了一下资料,就发到博客上来了,希望对大家有点帮助. 连续几天阅读<javascript高级程序设计>这本书了,逐渐 ...

  7. python 对字典"排序"

    对字典进行排序?这其实是一个伪命题,搞清楚python字典的定义---字典本身默认以key的字符顺序输出显示---就像我们用的真实的字典一样,按照abcd字母的顺序排列,并且本质上各自没有先后关系,是 ...

  8. [ 转载 ] Java基础14--创建线程的两个方法

    http://www.cnblogs.com/whgw/archive/2011/10/03/2198506.html Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类 ...

  9. [ 原创 ]学习笔记-Android 学习笔记 Contacts (一)ContentResolver query 参数详解 [转载]

    此博文转载自:http://blog.csdn.net/wssiqi/article/details/8132603 1.获取联系人姓名 一个简单的例子,这个函数获取设备上所有的联系人ID和联系人NA ...

  10. opencv 加载 修改 保存 图像

    #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; /* 1 加载图像 cv::imre ...