jQuery + HttpHandler 實現圖片裁剪

作者: Jericho  來源: 博客園  發布時間: 2009-05-27 15:45  閱讀: 11610 次  推薦: 0   原文鏈接   [收藏]  
 
摘要:上次發了幾個jQuery的插件和些心得, 很多園友(也許是自己站上的)發郵件希望能提供更多的源碼, 正好這次有個同學希望在自己的壇子上掛個圖片裁剪以生成頭像的功能, 于是幫忙寫了這么個插件
[1] 前言閱讀
[2] 插件說明

正文:
為了使層次分明及便于閱讀,  整個解決方案如下:

其中BitmapCutter.Core是圖片的服務器端處理程序, 類圖為:

簡單說明下, 更多說明可查看源碼注釋 :

Cutter為裁剪對象, 用于存儲客戶端通過AJAX提交的數據.

Helper為圖片處理類, 包括圖片翻轉(RotateImage()), 圖片裁剪(GenerateBitmap()).

Callback為服務器端圖片處理類, 通過使用Cutter封裝客戶端AJAX提交的數據, 然后調用Helper中的方法來完成圖片處理.

BitmapScissors是一個HttpHandler, 通過客戶端返回的 'action' 來調用Callback中的方法:


注: 此處用了反射來根據'action'值動態調用Callback中的方法, 如不習慣或認為不妥的請自行更改...

客戶端AJAX提交的Url為"scissors.axd", 實際為BitmapScissors類(如修改了服務器端處理程序, 請在Web.config中根據實際進行httpHandler節點配置), 本例為:

Ok, 下面開始介紹重點, $.fn.bitmapcutter插件的實現:

先來上張效果圖,標記下bitmapcutter中的Dom對象, 額, 喜歡剛大木的漫迷比較多, 就來張洛克昂的吧:

說明:

holder為原圖承載容器, 當原圖過大時可只顯示部分, 通過平移來查看未顯示區域的圖象, holder為div, 設置position樣式為relative, 這樣原圖img(同為img對象)的position樣式為absolute時, 即可通過控制其left, top 值來進行圖片的平移顯示, 注意holder的overflow必須設置成hidden, 這樣img將會被包裹在holder中,超出holder邊界的img將會被隱藏.

cutter為截取框, 可進行拖拽以選擇自己敢興趣的截取區域, 拖拽區域在holder容器內,  同時會在thumbimg(原理與holder+img相同)內生成縮略圖.

opts - 功能區域, 提供所有可用的功能按鈕, 包括: 放大, 縮小, 左移, 右移, 上移, 下移, 還原, 左旋轉, 右旋轉.

info - 圖片相素, 用于顯示當前待截取圖片的寬高比.

原理:

熟悉css的話應該很容易看出來, 利用相對定位的靈活性和js對css的控制.

[第1頁][第2頁]
0
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()