利用jquery Jcrop跟 php實現截圖功能

來源:互聯網
上載者:User
利用jquery Jcrop和 php實現功能

項目中用到了一個上傳頭像的功能,需要進行無重新整理的圖片上傳,並對上傳後的圖片進行使用者要求的,無重新整理上傳我就不說了,用的Juploader,相信大家並不陌生,重點講一下jcron和php配置實現圖片的截取的功能,好了,言歸正傳。首先介紹一下jcron的用法,我就不一一解釋了,我們只看最經常用的到功能:

$(function(){$('#cropbox').Jcrop({aspectRatio: 1,onSelect: updateCoords});});

以上是控制,對哪個圖片進行,“cropbox”是你要截取的img對象的id,“aspectRatio”控制等比例截取,“onSelect”的值是一個方法名,在選取時調用的方法

,個參數詳情解釋如下:

Option Name Value Type Description Default
aspectRatio decimal Aspect ratio of w/h (e.g. 1 for square) n/a
minSize array [ w, h ] Minimum width/height, use 0 for unbounded dimension n/a
maxSize array [ w, h ] Maximum width/height, use 0 for unbounded dimension n/a
setSelect array [ x, y, x2, y2 ] Set an initial selection area n/a
bgColor color value Set color of background container 'black'
bgOpacity decimal 0 - 1 Opacity of outer image when cropping .6
選取時的回調方法

function updateCoords(c){$('#x').val(c.x);$('#y').val(c.y);$('#w').val(c.w);$('#h').val(c.h);};

有了這個方法,可以在你是更新隱藏欄位中的座標值,通過隱藏欄位把座標資訊傳到後台。



ok,到此,前台已經告一段落,我們看背景php代碼。

後台php主要是根據前台傳遞的座標,對原圖進行截取,支援jpg,png,和gif三種圖片格式,當然,你可以擴充他,使他支援更多的圖片格式。

class Img_shot{private $filename;private $ext;private $x;private $y;private $x1;private $y1;private $width = 124;private $height = 124;private $jpeg_quality = 90;/** * 構造器 * *  */public function __construct(){log_message('debug', "Img_shot Class Initialized");}/** * 初始化對象 *@param filename 源檔案路徑全明 *@param width  的寬 *@param height  的高 *@param x  橫座標1 *@param y  縱座標1 *@param x1  橫座標1 *@param y1  橫座標2 *  */public function initialize($filename,$x,$y,$x1,$y1){if(file_exists($filename)){$this->filename = $filename;$pathinfo = pathinfo($filename);$this->ext = $pathinfo['extension'];}else{$e = new Exception('the file is not exists!',1050);throw $e;}$this->x = $x;$this->y = $y;$this->x1 = $x1;$this->y1 = $y1;}/** * 產生 * 根據圖片的格式,產生不同的 */public function generate_shot(){switch($this->ext){case 'jpg':return $this->generate_jpg();break;case 'png':return $this->generate_png();break;case 'gif':return $this->generate_gif();break;default:return false;}}/** * 得到產生的的檔案名稱 *  */private function get_shot_name(){$pathinfo = pathinfo($this->filename);$fileinfo = explode('.',$pathinfo['basename']);$filename = $fileinfo[0] . '_small.' . $this->ext;return $pathinfo['dirname'] . '/' .$filename;}/** * 產生jpg格式的圖片 *  */private function generate_jpg(){$shot_name = $this->get_shot_name();$img_r = imagecreatefromjpeg($this->filename);$dst_r = ImageCreateTrueColor($this->width, $this->height);imagecopyresampled($dst_r,$img_r,0,0,$this->x,$this->y,$this->width,$this->height,$this->x1,$this->y1);imagejpeg($dst_r,$shot_name,$this->jpeg_quality);return $shot_name;}/** * 產生gif格式的圖片 *  */private function generate_gif(){$shot_name = $this->get_shot_name();$img_r = imagecreatefromgif($this->filename);$dst_r = ImageCreateTrueColor($this->width, $this->height);imagecopyresampled($dst_r,$img_r,0,0,$this->x,$this->y,$this->width,$this->height,$this->x1,$this->y1);imagegif($dst_r,$shot_name);return $shot_name;}/** * 產生png格式的圖片 *  */private function generate_png(){$shot_name = $this->get_shot_name();$img_r = imagecreatefrompng($this->filename);$dst_r = ImageCreateTrueColor($this->width, $this->height);imagecopyresampled($dst_r,$img_r,0,0,$this->x,$this->y,$this->width,$this->height,$this->x1,$this->y1);imagepng($dst_r,$shot_name);return $shot_name;}}

接收到前台的座標資訊後,你可以執行個體化該類,用來產生圖片,返回產生的圖片的名稱,你就可以使用啦。


截完圖之後:


  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.