1. 程式人生 > >有了jQuery.Jcrop,選取美女的哪個部位你說了算

有了jQuery.Jcrop,選取美女的哪個部位你說了算

親們,真的不願意相信你們是被標題吸引進來的,但事實讓我不得不承認男人的本性。但是,請放心,我絕非標題黨(我最痛恨那些浪費大家時間的標題黨了),既然你有幸進來了,那我得想辦法讓你帶著收穫離開。輕輕地我走了,正如我輕輕地來,我要帶走樓主留給我的一片雲彩……

好吧,收起我的放蕩不羈,讓我們立馬切入正題,正如標題上說的,今天我們要在ASP.NET中用jQuery.Jcrop外掛實現圖片的選取功能,你想選取美女的哪個部位你說了算,我就管不著了。

總的來說,原理很簡單,大致流程是:在瀏覽器上載入原圖 --> 用矩形框在原圖上選取區域並將選取的頂點座標和矩形尺寸傳送至伺服器 --> 伺服器端用圖片切割演算法切割原圖並輸出切割後的圖片

。下面我們就分別對這幾個步驟詳細展開討論分析,並在最後附上小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中,接收頁面傳遞過來的切割圖片的頂點座標以及長寬尺寸,並呼叫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="" />

相關推薦

jQuery.Jcrop選取美女的哪個部位說了算

親們,真的不願意相信你們是被標題吸引進來的,但事實讓我不得不承認男人的本性。但是,請放心,我絕非標題黨(我最痛恨那些浪費大家時間的標題黨了),既然你有幸進來了,那我得想辦法讓你帶著收穫離開。輕輕地我走了,正如我輕輕地來,我要帶走樓主留給我的一片雲彩…… 好吧,收起我的放蕩不

美女程式設計師在微信朋友圈發一行程式碼結果底下評論炸

哈哈,今天在論壇看到一個截圖就是下圖這個,女程式設計師有這麼厲害麼。 說一下我曾經的隊友吧。 我的印象是跟其他女生差不多,特別喜歡逛淘寶,特別喜歡穿裙子,應該也是比較喜歡養小動物(據我所知,應該現在還養著一隻倉鼠)。 寫程式碼比較注重美感,有時候過了一道題會在那欣賞自己

一夜裁員4.4萬中年人:遠見的人早就給自己安排後路

看到一篇寫的很好的,針對目前裁員境況的文章。勉勵自己,也分享給大家。 轉載自:微信公眾號「青年計劃」 “青年君曾多次在後臺收到留言,父母的醫療,孩子的教育,人生的規劃等等,話語中的焦急是生活的步步緊逼。今天的這篇文章,大家可以對號入座,做個有遠見的人。” 0

Java記憶體模型是什麼為什麼要Java記憶體模型Java記憶體模型解決什麼問題?

網上有很多關於 Java 記憶體模型的文章,但是很多人讀完之後還是搞不清楚,甚至有的人說自己更懵了。 本文就來整體的介紹一下 Java 記憶體模型,讀完本文以後,你就知道到底 Java 記憶體模型是什麼,為什麼要有 Java 記憶體模型,Java 記憶體模型解決了什麼問

Java記憶體模型是什麼為什麼要Java記憶體模型Java記憶體模型解決什麼問題等。。。

本文中,有很多定義和說法,都是筆者自己理解後定義出來的。希望能夠讓讀者可以對Java記憶體模型有更加清晰的認識。當然,如有偏頗,歡迎指正。 為什麼要有記憶體模型 在介紹Java記憶體模型之前,先來看一下到底什麼是計算機記憶體模型,然後再來看Java記憶體模型在

一句英文能夠溫暖到

art from 技術分享 ant when my life png people webp I will make you happy when you are depressed. I will make you delighted when you a

警醒自己————爆炸的一天編譯器我求求!!!

Visual Studio真的是我服了!!! 這段程式碼我發誓真的沒有問題,但是一執行就報錯 :(  :(  :(   結果我發現是因為 回去一看   中文輸入法的空格!!!   寫此文章以此告誡我

【轉】那些事情導致老板下調的評價

提前 方案 掌握 但我 真的 周期 事情 未來 所在 別像死魚一樣 在我的團隊裏,出現過不少次這樣的情況,就是你發個消息在工作群裏,沒人回應,比如我看了一篇比較好的營銷文章,發到運營群裏,問大家覺得這個怎樣?然後就出現了死寂的沈默,nobody say anything,除

程式設計師過35歲就註定只能轉行

“程式設計師幹到35就不行了!”這是IT行業普遍存在的一種說法。有的說到30歲;有的說到35歲;有的說到40歲, 達到這個年齡上限就必須要調整方向去做管理、產品、業務等崗位的工作,甚至創業的也大有人在, 反正就是不能再寫程式碼了。web前端資料學習群:618522268大家都說程式設計師吃的是青春飯,原因可以

技術漫談:為何KPI毀索尼而OKR卻成就谷歌?

作者:李運華 編輯:小智 從技術 leader 的角度出發,看技術人績效考核的痛。大多數公司裡面總會因為 KPI 的考核方式而存在各種各樣的問題,OKR 是一個在矽谷網際網路公司比較流行的做法。怎樣去理解 OKR 這個概念,並在技術團隊中推行,從而使績效考核更合理也更有意義? KPI 的困惑 索尼

理解 Koa 框架中介軟體原理-看懂compose方法也就看懂 Koa

Node 主要用在開發 Web 應用,koa 是目前 node 裡最流行的 web 框架。 一個簡單的 http 服務 在 Node 開啟一個 http 服務簡直易如反掌,下面是官網 demo。 const http = require("http"); const serve

可能學假流程圖7步教繪制知識點匯總流程圖

排列 http 連接線 快速 右上角 fff 彈出 color 美的 流程圖在我們的日常辦公中運用的十分廣泛,很多人在繪制流程圖的時候都說很難,是這樣嗎,是你繪制的方法不對,還是你的渠道選錯了呢?接下來小編將分享繪制知識點總結流程圖方法給大家,一定要仔細看完哦!   使用

告別動態規劃連刷 40 道題我總結這些套路看不懂打我(萬字長文)

動態規劃難嗎?說實話,我覺得很難,特別是對於初學者來說,我當時入門動態規劃的時候,是看 0-1 揹包問題,當時真的是一臉懵逼。後來,我遇到動態規劃的題,看的懂答案,但就是自己不會做,不知道怎麼下手。就像做遞迴的題,看的懂答案,但下不了手,關於遞迴的,我之前也寫過一篇套路的文章,如果對遞迴不大懂的,強烈建議看一

可怕!公司部署一個東西悄悄盯著···

我是一個網路監控軟體,我被開發出來的使命就是監控網路中進進出出的所有通訊流量。這個網路中所有人的上網內容我都看的清清楚楚,是不是很可怕? ​ 我被一家公司老闆買來執行在一個配置極高的Linux伺服器上,這臺伺服器上的網絡卡可不得了,公司進出的網路資料包都得流經它,它源源不斷的把資料包抓上來交給我來分析。

html頁面進行二次顯示通過html、JavaScript、jQuery的ajax三種技術我可以實現任何介面效果

當前j2ee的web工程開發, 最常用的前端顯示技術,有兩種:html、jsp。 場景: 以html為例,當用戶執行了某個操作,j2ee的web工程反饋了一個html頁面給使用者(其實不是這麼簡單,中間有渲染的過程,這裡略過,就當使用者得到了一個html頁面)。例如點選“新

JavaScript封裝自己的一個彈窗是雙按鈕的比較簡單一些 其中引用jQuery來寫的方法最後暴露出去更好的建議歡迎評論 。。。。

$(function(){ // 設定自執行函式 (function(jQuery){ // 定義建構函式 var Popup = function (title,text,fn) { this.title = title || '

如果父類中構造函數並且構造函數參數而子類沒有因為子類繼承這個構造函數那麽創建子類對象的時候要傳參

bsp class nbsp 參數 int init log ini elf 1 class a(): 2 def __init__(self,aa): 3 self.aa = aa 4 class b(a): 5 def do(self)

電影產業七大風險專家們都支什麽招?

nbsp 很好 法律 還需 誌願者 中國傳媒 長大 樣本 團隊 在經歷了連續數年的超高速增長之後,國內的電影票房在去年增速突然放緩,眾多電影票房低迷導致賠錢,這給了很多業外投資人當頭一棒: 原來這個熱門行業風險這麽大。 實際上,即便是過去幾年國內電影市場快速成長的時期,能被

1001種玩法 | 這些工具離全棧工程師又近一步

engine 管理 新版 ssm 軟件包 ima 圖表 瀏覽器 想要 2016中國軟件開發白皮書中提到,市場上對技術開發人才的技能需求已經不單單只再是某個領域的初級開發者,那些精通前後端的全棧工程師逐漸被市場親睞。目前web開發群體5成以上為全棧開發者。預示著隨著市場需求

“懶”也要境地---大部分程序猿都在的地方再不來就out

公眾賬號 rac 經驗 回復 賬號 左右 post 程序 content 別人在玩。你也在玩,為什麽別人天天進步,職業晉升。而你則原地踏步。事實上你和他的距離僅僅有一個微信公眾號的距離。 假設你說。我根本沒有時間學習,不想看書,我僅僅想睡覺。我想你要接著往下看,由