今天要给大家介绍一个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. js包

    1.base.js /*语法: $("选择器") 工厂函数 */       /*寻找页面中name属性值是haha的元素*/   $("[name='haha']&qu ...

  2. Highmaps网页图表教程之Highmaps第一个实例与图表构成

    Highmaps网页图表教程之Highmaps第一个实例与图表构成 Highmaps第一个实例 下面我们来实现本教程的第一个Highmaps实例. [实例1-1:hellomap]下面来制作一个中国地 ...

  3. css平移动画的实现

    参考这位大佬的帖子:https://www.jianshu.com/p/5d8e77ef7f84

  4. 51Nod 快速傅里叶变换题集选刷

    打开51Nod全部问题页面,在右边题目分类中找到快速傅里叶变换,然后按分值排序,就是本文的题目顺序. 1.大数乘法问题 这个……板子就算了吧. 2.美妙的序列问题 长度为n的排列,且满足从中间任意位置 ...

  5. Linux怎么开启ssh

    一.查看ssh开启状态 service ssh status 这是已经开启了的状态 二.如果没有开启  键入以下命令开启 service ssh start 三.开启后如果不能利用xshell远程访问 ...

  6. Mysql的学习随笔day2

    关于输入中文的问题,各种更改完utf8后仍然乱码. 最后找到一种可行的方法:在insert之前,输入 set names 'gbk' 约束保证数据的完整性和一致性.约束分为表级约束和列级约束,前者可以 ...

  7. Ajax提交进度显示实例

    概述:ajax提交比较大的文件的时候,我们希望能够看到它上传的进度,代码放下面了. <!DOCTYPE html> <html> <head> <meta c ...

  8. 几张图理解Roll, Pitch, Yaw的含义

    Roll:翻滚    Pitch:俯仰    Yaw:偏航 有时候不知道它到底绕着哪个轴旋转得到的角,一个比较容易的记法是根据字母的排列顺序PRY分别对应XYZ轴进行旋转得到的角,即: Pitch是绕 ...

  9. HTML5学习笔记3

    7.文档元素 文档元素的主要作用是划分各个不同的内容,让整个页面布局清晰明快,让整个布局具有语义,进一步替代div.基本上没有什么实际作用效果,主要目的是在页面布局时区分各个主题和概念. h1~h6 ...

  10. linux下面mmap和setsignal函数用法

    #include <stdio.h> #include <stdlib.h> #include <sys/mman.h> #include <fcntl.h& ...