Jcorp + php 實現(xiàn)截圖+上傳

以下全部為手寫,禁止轉(zhuǎn)帖。
Jcorp是很好用的Jquery 截圖插件,兼容chrome firfox。
Demo地址是:http://code.ciaoca.com/jquery/jcrop/demo/
現(xiàn)在用Jcorp + php 實現(xiàn)截圖+上傳,從上面地址下載 js,css文件引入。如果沒有引入css則會出現(xiàn)選框無法移動,無邊框等情況。具體參數(shù)參考以上網(wǎng)址手冊。
我的初始化配置是這樣的

function initLogoJcrop(modal){
            //modal為彈層對象,
            modal.find('img.preview').Jcrop({
                //設(shè)置畫布寬度為568
                boxWidth:568,
                onChange:function(res){
                    //當(dāng)選框位置改變時記錄選框的值(實際尺寸)
                    // 這里時實際尺寸,這里是個坑,頁面顯示圖片和上傳圖片有可能不是一個尺寸
                    logoChangeLoc = this.tellSelect();
                    widgetSize = this.getBounds();
                    //console.log(widgetSize);
                    //console.log(logoChangeLoc);
                }
            },function(){
                jcrop_api = this;
                jcrop_api.animateTo([0,0,568,0]);
                jcrop_api.setOptions({ aspectRatio: 1/1 });
                jcrop_api.setOptions({ allowSelect: true });
                jcrop_api.setOptions({ allowMove: true });
                jcrop_api.setOptions({ allowResize: true });
                jcrop_api.setOptions({ trackDocument: false });
            });
        }

具體參數(shù)查看手冊,這里就不介紹了。當(dāng)實例化完插件后,當(dāng)觸發(fā)事件后,把圖片和截取圖片當(dāng)位置,圖片尺寸信息通過ajax上傳服務(wù)器。參數(shù)代碼如下:

            //驗證完圖片格式后,把參數(shù)都放到formdata中,widgetSize為數(shù)組,傳到服務(wù)器應(yīng)該是字符串,后端注意轉(zhuǎn)化,file為input.val();
            var formData = new FormData();
            formData.append('widgetSize',widgetSize);
            formData.append('file','');
            formData.append('imgSize',logoChangeLoc);

以下是php處理代碼,這里我不用類庫了,直接php原生寫給大家看。代碼如下:

          //判斷圖片格式
          //獲取參數(shù)
          //移動圖片到目錄
          move_uploaded_file($tmp,$filePath.$imgname);
          imggdAction($filePath.$imgname,$filePath,json_decode($size,true),$widgetSize);  //$size為截取圖片的尺寸位置信息,widgetSize為圖片真實尺寸
 function imggdAction($path,$filePath,$size,$widgetSize){
        $widgetSize = explode(',',$widgetSize);
        $sizeInfo = getimagesize($path);  //獲取圖片信息
        $imgWidth = $widgetSize[0];
        $imgHeight = $widgetSize[1];
        $mime = $sizeInfo['mime']; //類型
        $fileextArray = explode('/',$mime);
        $fileext = $fileextArray[1];  //圖片后綴
        $ext2functions = array(
            'jpg'  => 'imagecreatefromjpeg',
            'jpeg' => 'imagecreatefromjpeg',
            'png'  => 'imagecreatefrompng',
            'gif'  => 'imagecreatefromgif'
        );
        //獲取圖片資源
        $currentImg = call_user_func($ext2functions[$fileext], $path);

        //縮略圖真圖
        $dest_img = imagecreatetruecolor($imgWidth,$imgHeight);
        //生成縮略圖
        imagecopyresampled($dest_img, $currentImg, 0, 0, 0, 0, $imgWidth, $imgHeight, $imgWidth, $imgHeight);
        unlink($path); //刪除原圖
        imagedestroy($currentImg); //銷毀原圖
        // 調(diào)整默認(rèn)顏色
        $color = imagecolorallocate($dest_img, 255, 255, 255);
        imagefill($dest_img, 0, 0, $color);
        $imgname = time().rand(100,999).'.jpeg';
        //imagejpeg($dest_img,$filePath.$imgname,100);
        //裁剪
        //x:左上角x坐標(biāo),y:左上角y坐標(biāo),x2:右下角橫坐標(biāo),y2:右下角縱坐標(biāo),w截取圖片寬,h截取圖片高
        //生成截圖真圖
        $dest_img1 = imagecreatetruecolor($size['w'],$size['h']);
        //imagecopyresampled($dest_img, $currentImg, 0, 0, $x, $y, $width, $height, $w, $h);
        imagecopyresampled($dest_img1, $dest_img, 0, 0, $size['x'], $size['y'], $size['w'], $size['h'], $size['w'], $size['h']);
        $color = imagecolorallocate($dest_img1, 255, 255, 255);
        imagefill($dest_img1, 0, 0, $color);
        imagedestroy($dest_img); //銷毀縮略圖真圖
        $imgname = time().rand(100,999).'.jpeg';
        imagejpeg($dest_img1,$filePath.$imgname,100);
        imagedestroy($dest_img1); //截圖真圖
        return $filePath.$imgname;
    }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容