1. 程式人生 > >利用jquery的imgAreaSelect外掛實現圖片裁剪示例

利用jquery的imgAreaSelect外掛實現圖片裁剪示例

原文連結:http://www.cnblogs.com/mizzle/archive/2011/10/13/2209891.html

將使用者上傳的圖片進行裁剪再儲存是現在web2.0應用中常常處理的工作,現在藉助jquery的imgareaselect外掛再配合PHP的GD庫就可以輕鬆的實現這個在以前來說非常棘手的功能。我們來看看它的實現步驟

1、包含進CSS檔案(imgareaselect-default.css)和 jquery.imgareaselect.js檔案

2、html程式碼(要裁剪的圖片元素)

<img id="selectbanner" src="/pic/banner.jpg" />

3、imgAreaSelect的資料操作

$('#selectbanner').imgAreaSelect({ selectionColor: 'blue', x1:0, y1:0, x2: 950, 

maxWidth:950,minWidth:950,y2:400,minHeight:400,maxHeight:400, 

selectionOpacity: 0.2 , onSelectEnd: preview }); 

這樣即可在該圖片元素中使用裁剪功能了,當選框確定之後我們要儲存被選擇的圖片還得自己寫程式碼來操作。下面是當確定好圖片區域後點擊一個裁剪按鈕後的操作:

//裁剪確認操作

$("#sliceButton").click(function() {

 var pic = $('#selectbanner').attr('src');  

 var x,y,w,h;

 $.post(

  "/template/sliceBanner",

  {

   x:$('#selectbanner').data('x'),

   y:$('#selectbanner').data('y'),

   w:$('#selectbanner').data('w'),

   h:$('#selectbanner').data('h'),

   pic:pic

  },

  function(data){

   //把裁剪後圖片載入到原處

   if(data){

    $('#selectbanner').attr(pic);

   }

  }

 );

 

});

//設定選取框的選取資訊

//利用jquery中的data方法來儲存生成的資料

function preview(img, selection) { 

 $('#selectbanner').data('x',selection.x1);

 $('#selectbanner').data('y',selection.y1);

 $('#selectbanner').data('w',selection.width);

 $('#selectbanner').data('h',selection.height);

} 

4、PHP端的主要程式碼:

//利用GD庫來作裁剪操作

function sliceBanner(){

 $x = (int)$_POST['x'];

 $y = (int)$_POST['y'];

 $w = (int)$_POST['w'];

 $h = (int)$_POST['h'];

 $filename = trim($_POST['pic']);

 if(isset($filename) ){

  $uploadBanner =  '/temp'. $filename;

  $sliceBanner = 'upload/'. $filename;

  $src_pic = getImageHander($uploadBanner);

  if(!$src_pic){

   echo 0;exit;

  }

  $dst_pic = imagecreatetruecolor($w, $h);

  imagecopyresampled($dst_pic, $src_pic, 0, 0, $x, $y, $w, $h, $w, $h);

  imagejpeg($dst_pic, $sliceBanner);

  imagedestroy($src_pic);

  imagedestroy($dst_pic);

  echo 1;exit;

 }

 echo 0 ;exit;

}

function getImageHander ($url) {

 
[email protected]
($url); switch($size['mime']){ case 'image/jpeg': $im = imagecreatefromjpeg($url);break; case 'image/gif' : $im = imagecreatefromgif($url);break; case 'image/png' : $im = imagecreatefrompng($url);break; default: $im=false;break; } return $im; }

1、介紹
ImgAreaSelect是一jQuery外掛,它支援使用者通過滑鼠拖曳選擇圖片的一部分,非常的fashion。另外,可以在這個選擇影象區域的基礎上應用網站的其他一些技術,比如圖片拖曳、圖片編輯等。
2、基本用法
這個外掛基於jQuery上通過imgAreaSelect()方法來呼叫,它操作的物件是HTML中<img>元素內的影象。

複製程式碼 程式碼如下:
<script type="text/javascript">
$(document).ready(function () {
$('img#photo').imgAreaSelect({
handles: true,
onSelectEnd: someFunction
});
});
</script> 


如果在jQuery物件裡有不止有一個img元素,那麼這個外掛會對裡面的元素逐個應用此方法。其實這個方法不僅僅應用於img元素,它支援任何塊級元素(比如有影象背景的div元素)。
與其它jQuery外掛相似,這個外掛可以在$(document).ready() 或者 $(window).load()控制代碼中初始化。
3、選項
使用者在這個外掛的很多方面都可以進行定製,使用者通過外掛選項來達到這個目的(這些選項會在外掛初始化的時候起效)。這些選項包括:

選項

描述

aspectRatio

長寬比,以後在選擇時候就會維持不變。

e.g. "4:3"

autoHide

如果設為true,那麼在選擇完後區域會消失。

Default:false

classPrefix

預先給外掛元素的字首(詳見下面:5、元素與類)

Default:imgareaselect

disable

如果設定成true,這個外掛將不起作用(但是影象還是可見的)

enable

如果設定成true,這個外掛又將重新起作用

fadeSpeed

若設定成大於零的某個數,將"漸隱/漸現"這個外掛

Default:true

handles

若設定成true,在改變大小的時候顯示改變框(就是角點有些小"矩形")

Default:false

hide

若設定成true,則隱藏選擇框

imageHeight

影象的真實高度(因為有可能被CSS縮放過了)

imageWidth

影象的真實寬度(因為有可能被CSS綻放過了)

instance

若設為true,imgAreaSelect()函式會返回一個對選擇區域影象的一個引用,以便能夠進一步使用API。(詳見8、API方法)

keys

啟用/關閉鍵盤支援(詳見7、鍵盤支援)

Default:false

maxHeight

限制選擇框(以畫素為單位),設定最大、最小的高度、寬度。

maxWidth

minHeight

minWidth

movable

設定是否支援選擇框移動

Default:true

parent

指定此外掛預設所附加到的父元素

Default:body

persistent

若設定成true,點選選擇區域外將開始一個新的選項(換言之,是否讓使用者只能移動/縮放選擇區域)

Default:false

remove

若設定成true,則該外掛將完全移除

resizable

決定選擇區域是否可以改變大小

Default:true

resizeMargin

當選擇區域寬度超過多少畫素時將啟用"可改變大小"模式

show

如果設定成true,選擇區域將可見

x1

y1

初始化時選擇框左上角的座標

x2

y2

初始化時選擇框右下角的座標

zIndex

設定此外掛所作用元素的z-index的值,一般情況下,imgAreaSelect 總是可以自動計算出它的值,但是極少數情況下還是有必要設定的。

onInit

當外掛初始化時所呼叫的函式(詳見6、回撥函式)

onSelectStart

當開始選擇時所呼叫的函式(詳見6、回撥函式)

onSelectChange

當改變選擇區域時所呼叫的函式(詳見6、回撥函式)

onSelectEnd

當選擇結束時所呼叫的函式(詳見6、回撥函式)

4、樣式表
隨著外掛發放的還有三個樣式表:

imgareaselect-default.css – 這是預設的樣式表,
imgareaselect-animated.css – 這個樣式與預設的樣式表基本是一樣的,只是它能夠讓選擇區域邊框變化
imgareaselect-deprecated.css – 只有你想使用不贊同的選項時才用這個樣式表。
你只需要在html頭部將其中的一個樣式表新增進來就可以。這css資料夾中還包含4張gif圖片,它們是用來顯示邊框的。

5、元素與類
此外掛通過建立幾個div元素來表示選擇區域,包括邊框、可調整手柄以及未選擇的區域。這些元素已經指定了特定的類名了,所以你可以通過CSS或者jQuery選擇器來獲得並操作它們。

類名

指定給的物件

imgareaselect-selection

選擇的區域

imgareaselect-border1
imgareaselect-border2
imgareaselect-border3
imgareaselect-border4

選擇區域的四個邊框,由四個div組成的

imgareaselect-handle

可改變大小的調整手柄(四個或者八個divs,如果沒有使能的話,則不顯示)

imgareaselect-outer

未選擇區域,由四個divs組成

下面的物件示意圖展示了這外掛的這些元素如何佈置的:

其中的字首"imgareaselect"是預設的字首,可以通過"classPrefix"選項來修改。這在當有許多選擇框需要分別操作(比如修改樣式)的時候特別有用。

6、回撥函式

回撥函式(當設定onInit, onSelectStart, onSelectChange或 onSelectEnd選項)接收兩個引數,第一個選項是這個外掛所應用影象的引用,另外一個則是呈現當前選擇的物件,這個物件有六個性質。

性質

描述

x1

y1

選擇區域左上角的座標

x2

y2

選擇區域右下角的座標

width

選擇區域的寬度

height

選擇區域的高度

為了便於理解,下面給出當選擇完後執行的回撥函式的例子:

$('img#photo').imgAreaSelect({

onSelectEnd: function (img, selection) {

alert('width: ' + selection.width + '; height: ' + selection.height);

}

})

7、鍵盤支援

如果選項"keys"設定為true,那麼我們能夠通過鍵盤上的按鍵進來選擇框的移動。下面的鍵可以使用,預設的功能如下:

按鍵

動作

方向鍵

每次以10畫素為單位移動選區

Shift+方向鍵

每次以1畫素為單位移動選區

Ctrl+方向鍵

每次以10畫素為單位擴縮選區

Ctrl+Shift+方向鍵

每次以1畫素為單位擴縮選區

當然你也可以自己通過設定"keys"這個選項來覆蓋預設鍵設定,物件有下面的屬性:

屬性

描述

方向鍵

設定方向鍵的功能

Shift

設定Shift鍵的功能

Ctrl

設定Ctrl鍵的功能

Alt

設定Alt鍵的功能

每個屬性通過設定數值(以畫素為單位,數值要不小於1),表明當按下此鍵時移動/改變大小多少畫素,或者指定其值為"string"來指定它是"resize"模式。例如:

$('img#example').imgAreaSelect({

keys: { arrows: 15, ctrl: 5, shift: 'resize' }

})

這個例子裡設定成"方向鍵會移動選區15畫素,按住Ctrl鍵會移動5畫素,而按住Shift鍵時則切換到resize模式"。

如果不止一個影象,且自己修改了按鍵設定,那麼只對一個影象會應用這個自定義設定。一般來說,當"啟用"(用滑鼠點選)某個影象時,這個影象就會使用自定義的按鍵設定。

8、API方法

這個外掛也提供了幾個API方法擴充套件它的應用,並能夠通過這些API方法跟其他web應用聯合起來。

為了使用這些方法,首先需要一個外掛物件,可以呼叫imgAreaSelect()函式並讓其選項"instance"設定為true來實現:

var ias = $('#photo').imgAreaSelect({ instance: true });

現在就可以使用此物件來呼叫公共的方法了。例如,設定一個預設預定義的範圍:

ias.setSelection(50, 50, 150, 200, true);

ias.setOptions({ show: true });

ias.update();

只要當初始化完成,就可以使用這些API方法了。下面列出這些API方法:

方法

描述

getOptions

getOptions()

  --返回當前選項的配置

Returns:

一個包含當前選項配置的物件(一般是JSON物件)

setOptions

setOptions(newOptions)

--設定外掛選項

引數:

newOptions– 選項配置物件(一般是JSON物件)

getSelection

getSelection([noScale])

 --獲取當前的選區

引數:

noScale (可選)– 如果設定為真,那麼對於返回的選區不進行縮放操作。

返回:

選擇區域裡的物件

setSelection

setSelection(x1, y1, x2, y2, [noScale])

  --設定當前選擇區域

引數:

x1 – 選擇區域左上角X座標

y1 – 選擇區域左上角Y座標

x2 –選擇區域右下角X座標

y2 – 選擇區域右下角Y座標

noScale (可選) –若設為真,則不會對影象進行縮放

注意:此方法只在外掛內設定選擇區域,並不會馬上觀察到選區的變化,如果需要立馬顯示更改後的區域,必須在使用setSelect()函式後就呼叫update()函式,且讓show選項為true.

cancelSelection

cancelSelection()

  --取消當前的選擇

注意:這個方法會隱藏"選擇/未選擇"區域,所以不必呼叫update()函式。

update

update([resetKeyPress])

--更新外掛配置

引數:

resetKeyPress (可選)– 如果設成false,此例項的按鍵將復位(即不可用)

二、簡單例項

1、寬度或者高度限制

minWidth、minHeight、maxWidth以及maxHeight選項允許你設定選區的範圍。在這個例子中,影象的最大範圍將限制為200x150px。

$(document).ready(function () {

$('#ladybug_ant').imgAreaSelect({ maxWidth: 200, maxHeight: 150, handles: true });

});

2、固定高寬比

配置aspectRatio選項就可以了,這裡將其設定成"4:3":

$(document).ready(function () {

$('#bee').imgAreaSelect({ aspectRatio: '4:3', handles: true });

});

3、設定初始選項區域

配置x1, y1, x2與 y2選項就可以了:

$(document).ready(function () {

$('#duck').imgAreaSelect({ x1: 120, y1: 90, x2: 280, y2: 210 });

});

三、回撥函式示例

1、選區預覽

在下面的程式碼小片斷裡,onSelectChange()回撥函式實現了選擇區域預覽的效果。

官方原始碼:http://odyniec.net/projects/imgareaselect/examples-callback.html

functionpreview(img, selection) {

var scaleX = 100 / (selection.width || 1);

var scaleY = 100 / (selection.height || 1);

$('#ferret + div > img').css({

width: Math.round(scaleX * 400) + 'px',

height: Math.round(scaleY * 300) + 'px',

marginLeft: '-' + Math.round(scaleX * selection.x1) + 'px',

marginTop: '-' + Math.round(scaleY * selection.y1) + 'px'

});

}

//這裡通過jQuery語法在原來圖片後插入同樣的圖片

$(document).ready(function () {

$('<div><img src="ferret.jpg" style="position: relative;" /><div>')

.css({

float: 'left',

position: 'relative',

overflow: 'hidden',

width: '100px',

height: '100px'

})

.insertAfter($('#ferret'));

$('#ferret').imgAreaSelect({ aspectRatio: '1:1', onSelectChange:preview });

});

由於預覽視窗是100x100px的,因此當截圖視窗小於100px時,預覽圖會放大;當截圖視窗大於100px時,預覽圖會縮小。這兩種效果圖如下:

截圖 1 當截圖視窗大於100px時

截圖 2 當截圖視窗小於100px時

需要說明的是,這裡製作這種效果使用了一種技巧。最關鍵的一個是等比率縮放.它需要兩個圖片,第一圖是原圖,第二個圖是選擇區域後顯示的圖,用第一個圖上的選擇座標+css控制產生第二個圖,實際上兩個圖是一樣的,只不過通過css控制了第二張圖的顯示區域與縮放比率。證據如下:

【證據一】在$(document).ready()函式中通過insertAfter插入"src"也是"ferret.jpg"的圖片。再注意一下,這一段裡的"overflow: 'hidden',"這一行程式碼就是讓超過100px高寬的圖片額外內容隱藏掉。

【證據二】在preview()函式中,首先就定義了scaleX與scaleY,它們的內容就是100/selection.width(或height),也就是當selection.width小於100時,這個因子起放大作用,反之起縮小作用。

值得注意的是:

回撥函式中實際圖的寬高(這裡的300,400是實際圖的高,要根據實際情況調整!),回撥函式中新圖的寬高這些引數必須設定正確、否則會出現 選擇偏差

2、提交選區的座標

如果需要實現真正截圖功能必須使用伺服器端支援,例如php asp aspx jsp。也就是意味著,在客戶端選擇只是第一步,如果需進一步的處理,必須要將這選區的座標提交給伺服器。那麼如何實現呢?

建立一個表彰,裡面有四個隱藏域:

<form action="crop.php" method="post">

<input type="hidden" name="x1" value="" />

<input type="hidden" name="y1" value="" />

<input type="hidden" name="x2" value="" />

<input type="hidden" name="y2" value="" />

<input type="submit" name="submit" value="Submit" />

</form>

然後在初始化imgAreaSelect時,使用onSelectEnd()回撥函式將選擇後的資料賦給這些隱藏域,正如下面程式碼那樣:

$(document).ready(function () {

$('#ladybug').imgAreaSelect({

onSelectEnd: function (img, selection) {

$('input[name="x1"]').val(selection.x1);

$('input[name="y1"]').val(selection.y1);

$('input[name="x2"]').val(selection.x2);

$('input[name="y2"]').val(selection.y2);

}

});

});

這樣當點選"submit按鈕"時,頁面將上載到伺服器,如果使用PHP的話,使用$_POST['x1']等就得到相應的座標資料了

相關推薦

利用jquery的imgAreaSelect外掛實現圖片裁剪示例

原文連結:http://www.cnblogs.com/mizzle/archive/2011/10/13/2209891.html 將使用者上傳的圖片進行裁剪再儲存是現在web2.0應用中常常處理的工作,現在藉助jquery的imgareaselect外掛再配合PHP的G

前臺Jcrop配合後臺Graphics實現圖片裁剪並上傳

模式 ubi ini gin pre log 清空 圖像 ets Jcrop:一個功能強大的圖片裁剪插件 版本:Jcrop v0.9.12 VS版本:vs2015 下載地址:http://code.ciaoca.com/jquery/jcrop/version/Jcrop-

cropper.js實現圖片裁剪預覽並轉換為base64發送至服務端。

urlencode button 圖片 all 完成 r.js borde lan meta 一 、準備工作 1.首先需要先下載cropper,常規使用npm,進入項目路徑後執行以下命令: npm install cropper 2. cropper基於

css利用padding百分比實現圖片自適應高度

應用場景 寬高比率,實現圖片自適應高度,防止圖片載入過程高度為0,載入完圖片高度撐起,它下面的div抖動問題 重點:CSS百分比padding都是相對寬度計算的 <div class="works-item-t"> <img src="./150x200.png">

利用 nginx 擴充套件實現圖片剪裁

無快取版本 第一步:安裝nginx模組 ngx_http_image_filter_module,用寶塔linux一鍵安裝,有自帶。 第二步:修改配置 location ~ (.+?)_(\d+)x(\d+)\.(gif|jpg|jpeg|png|bmp|swf)$

基於ucrop實現圖片裁剪需求

效果圖 重寫ucrop佈局,更改UCropActivity程式碼 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com

Java+Jcrop實現圖片裁剪並儲存到伺服器

外掛下載 前端程式碼 前端程式碼較長,已放至碼雲 示例demo使用的是限制長寬比的圖片選擇方式,其它方式可以訪問官網下載官方壓縮包,裡面有幾個示例demo。 後端程式碼 使用的解碼方式是java8下decoder物件,java8以下請選擇其它解

SSM中使用Kindeditor外掛實現圖片的批量上傳與回顯

圖片上傳的方式: 1.上傳到資料庫中的Blob型別,從資料庫中取出來並顯示。詳細見下面連結 http://blog.sina.com.cn/s/blog_5b0745e80102we31.html 2.上傳到伺服器的固定目錄下,在資料庫中僅儲存圖片的地址。詳細見下文 效果

jquery.lazyload外掛實現圖片延遲載入

jquery.lazyload是一個實現圖片延遲載入的jQuery 外掛,它可以延遲載入長頁面中的圖片。在瀏覽器可視區域外的圖片在初始狀態下不會被載入,直到使用者將頁面滾動到它們所在的位置。 1.引入js檔案 <script src="//ajax.googleapis.com/ajax/l

Flutter 實現圖片裁剪

circle tps paint pos inf start null move hit github地址 實現原理很簡單 ,自己繪制一個裁剪框, 根據手勢 選擇到適合的位置 ,然後將選中的區域繪制到一個新的圖片上,從而完成裁剪 裁剪框的繪制 這裏我是根據點來連

Flutter 實現圖片裁剪

github地址   實現原理很簡單 ,自己繪製一個裁剪框, 根據手勢 選擇到適合的位置 ,然後將選中的區域繪製到一個新的圖片上,從而完成裁剪   裁剪框的繪製  這裡我是根據點來連線的  因為每個點上會繪製一個拉伸的識別符號 List&

vue.js中使用swiper外掛實現圖片輪播

第一步:安裝swiper:npm install [email protected] --save-dev 完成之後,你會在專案的node_modules資料夾中多一個swiper資料夾。 第二步:引用元件 import Swiper from 'swiper

五滴水:使用Ajax+jQuery來實現前端收到的資料在console上顯示+簡單的主頁設計與bootstrap外掛實現圖片輪播

前言嘚吧嘚 三天沒更博了,嘻嘻嘻打自己:3 最近的狀態比開始的時候好太多,能看懂cygwin和console上報的錯誤了,知道到底是縮進出了問題還是我的程式碼邏輯不完整了,找資源也知道哪裡是我要的,也可以找到想要的了·······慢慢來,給自己立個flag :

利用swiper外掛實現移動端輪播圖

準備: swiper.min.css swiper.min.js swiper.min.css: head 標籤內引入 swiper.min.js: 標籤前引入 CSS 部分 /* swiper start*/ .swiper-container {

WordPress外掛實現圖片縮圖幻燈展示效果

在使用WordPress製作企業網站的過程中,經常會因為要展示某個產品的細節效果圖,而需要在產品詳細頁中插入多張圖片。但是如果單純的把圖片一張張從上往下插入的話,對於使用者的閱讀體驗而言可能會大打折扣。好在WordPress有很多功能外掛,可以幫助我們很輕鬆的實現多樣化的

基於SpringBoot的圖片上傳元件,實現圖片裁剪、Thumbnailator壓縮的功能

本週三、週四、週五封裝了一個基於SpringBoot的圖片上傳元件。功能流程如下:1、前臺頁面有一個“選擇檔案”按鈕,點選選擇一張圖片後,在前臺介面進行顯示。2、雙擊顯示出來的圖片,前臺使用cropper圖片裁剪外掛,將裁剪資訊(裁剪起始點座標 x,y,裁剪寬度width,裁

jquery.rotate外掛實現轉盤抽獎示例

css程式碼:.draw-out{width:400px;height:400px;margin:30px auto;position:relative} .draw-bottom{width:400px;height:400px;position:relative}

imgareaselect + php實現圖片裁剪

簡介 使用 引用css /js/jquery.imgareaselect-0.9.10/css/imgareaselect-default.css 引用js /j

.net利用ajax技術實現圖片上傳並回顯到介面

最近在開發過程中遇到了一個非常鬱悶的問題,就是圖片傳到fileUpload中時想要實現回顯到image控制元件中。 在前臺,fileUpload.change()事件中判斷fileUpload.val()不為空,把改路徑值賦給image.attr("src",$('#fil

java實現圖片裁剪、縮放功能

import java.awt.Image; import java.awt.Rectangle; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.Buff