总的来说,原理很简单,大致流程是:在浏览器上加载原图 --> 用矩形框在原图上选取区域并将选取的顶点坐标和矩形尺寸发送至服务器 --> 服务器端用图片切割算法切割原图并输出切割后的图片。下面我们就分别对这几个步骤详细展开讨论分析,并在最后附上小demo供大家参考。
1、在页面上加载原图 这个就不用多说了,就是在页面上显示一张图片,一个img标签搞定,不过为了下一步演示,还是贴一下代码
<img src="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"></script>
<script type="text/javascript"src="js/Jcrop/js/jquery.Jcrop.js"></script>
<link rel="stylesheet" href="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中,接收页面传递过来的切割图片的顶点坐标以及长宽尺寸,并调用C#图像切割类实现图片切割:
复制代码 代码如下:
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,下载demo。
最后,你是否带走了我留下的这片云彩?请告诉我,我很期待你的答案。
相关推荐:
ChatGPT内部HTTP接口文档-为开发者提供高效便捷的AI服务接入方式,安屿ai
为什么做酒店seo,为什么做酒店 ,ai uehara下载
为什么seo这么麻烦,seo是什么意思 为什么要做seo ,dota1ai地图命令选ai
SEO关键词推广软件官网-助力企业实现高效精准的网络营销,圈圈ai
SEO前的准备工作:如何让网站为搜索引擎优化做好充分准备,SEO_网站排名优化_网络推广
SEO要不,来看看如何通过SEO优化提高网站流量和曝光度,seo 获客技巧
什么是seo方法,何为seo ,ai写作神器源码是什么
SEO就是:让你的品牌脱颖而出,获得更多曝光与流量,梅岭关键词排名优化
文章AI生成标题:让创作更轻松,内容更精彩
个性化广告:新时代营销的秘密武器,建设经营性网站怎么记账
SEO短视:为何眼前的成效不能成为长久的策略?,网站上线seo优化
SEO教研:数字营销新趋势,提升网站流量与转化率的关键,齐鲁证券网站建设
优化收费,助力企业提升效益,实现共赢,宜州餐饮网站建设
ChatGPT异常了:人工智能的极限与突破,ai and ethics
怎样使用AI写文章:释放创作潜能,提升写作效率
SEO数量-如何提升你的网站排名与流量?,射阳seo优化五星服务
ChatGPT支持多种语言输入输出,让全球资讯触手可及,联想拯救者的ai写作
SEO快速优化技术:助力网站流量暴增,轻松登顶搜索引擎,铜陵ai全网通推广软件
ChatGPT为什么打不开?背后原因与解决方案,慧ai写作
SEO手法如何通过精准优化提升网站排名,获取海量流量,网站建设协议流程是什么
优化页面-提升用户体验与搜索引擎排名的关键,绍兴视频营销推广
pbootcms前端翻译插件-轻松实现网站多语言支持,拓展全球市场,st ai绘画
SEO有意:如何通过优化策略提升网站排名与流量,天津政府智慧网站建设
SEO中的别类词:提升排名,轻松超越竞争对手,ai插画生肖
《收录情况:数字时代的网络信息检索与价值体现》,山东全域营销推广软件客服电话
SEO能给企业带来什么价值,seo的影响 ,ai蓝衣美女
seo链接有什么用,seo外链是什么意思 ,one ai写作
SEO优化工具优势:提升网站排名,带来流量和转化的秘密武器,ai圆形造字
seo站内链接有什么作用,seo中网站内链的作用 ,781900ai
用AI写文章查重率高吗?揭秘AI写作与查重检测的关系
SEO文案:如何通过巧妙布局提升网站排名,吸引更多流量,娄底网站建设工作文案
【BVIP尊享体验:超越奢华,开启专属未来】,珠宝网站建设思路
“收录量为1”,打造数字化时代的独特竞争力,网站建设页面制作流程
ChatGPT点不了?背后的真相与解决方法,ai.520523
什么是SEO可以自学吗,seo零基础可以自学吗 ,ai1紫
SEO开发:数字营销的核心驱动力,园区网站建设
ChatGPT打不开实时问题解决方案:让你的AI助手始终在线,psd 转ai
SEO出超:如何通过精准优化实现网站流量大爆发,营销推广方式联系f火15星
好用的AI智能工具,让生活与工作更高效!
SEM有哪几个平台?数字营销的多元选择,AI怎么取消移动间距
SEO学堂:开启数字营销新时代,全面提升网站排名与流量,文山ai营销推广方案
什么是蜘蛛弛?揭秘这个SEO优化背后的神秘工具,南沙seo优化排名价格
主题导航-引领互联网世界的智慧之路,大渡口网站建设方案
seo都有什么问题,seo都有什么问题和答案 ,ai凯旋公主下载
ChatGPT3.5需要登录使用吗?AI使用的真相!,电脑版写作ai推荐怎么关闭
SEO优化的话题:助力企业成功的关键,夏杰ai智能管家
SEO出来,打破流量瓶颈,助力企业增长的关键策略,南昌营销推广代理商电话
SEO收费如何选择合适的SEO服务,提升网站排名并增加曝光度,做网站优化哪家实惠
seo要学什么技术,seo要学什么技术好 ,ai.fale
2024年AI写文章生成器推荐:让创作轻松高效,提升写作水平