lavarel用cropper jq插件裁剪圖片插件cropper用法新的

一员舵、下載安裝

github下載地址https://github.com/fengyuanchen/cropperjs
引用:

 <!-- jQuery -->
        <script src="{{ asset('/backend/vendors/jquery/dist/jquery.min.js')}}"></script>
 {{--cropper-cs--}}
        <link  href="{{asset('/backend/myvebdors/cropper-master/dist/cropper.min.css')}}" rel="stylesheet">
        {{--cropperjs--}}
        <script src="{{asset('/backend/myvebdors/cropper-master/dist/cropper.min.js')}}"></script>

二、js定義類(初始化和按鈕事件)

 * 圖片剪切js
 */
var headimg = function () {
    var headimgInit = function () {
        //圖片
        var $image = $('#image');
        // 打開圖片按鈕
        var $photoInput =   $('#photoInput');
        //裁剪后的圖片
        var $imageinfo ;
        // 初始化這個核心方法修改自官方demo的js
        var initCropper = function (img, input){
            var $image = img;
            var options = {
                aspectRatio: 1/1, // 縱橫比
                preview: '.img-preview', // 預(yù)覽圖的class名
                minContainerWidth:300,
                minContainerHeight:350,
                minCanvasWidth:50,
                minCanvasHeight:50,
            };
            $image.on({
                'build.cropper': function (e) {
                    // console.log(e.type);
                },
                'built.cropper': function (e) {
                    // console.log(e.type);
                },
                'cropstart.cropper': function (e) {
                    // console.log(e.type, e.action);
                },
                'cropmove.cropper': function (e) {
                    // console.log(e.type, e.action);
                },
                'cropend.cropper': function (e) {
                    // console.log(e.type, e.action);
                },
                'crop.cropper': function (data) {
                    // 當(dāng)改變剪裁容器或圖片時的事件函數(shù)藕畔。
                    //獲取位置數(shù)據(jù)
                    $('#imgdatax').html(data.x.toFixed(2));
                    $('#imgdatay').html(data.y.toFixed(2));
                    $('#imgdatawidth').html(data.width.toFixed(2));
                    $('#imgdataheight').html(data.height.toFixed(2));
                    /*  //打印日志
                     //位置xy
                     console.log(data.x);
                     console.log(data.y);
                     // 裁剪區(qū)域長和高
                     console.log(data.width);
                     console.log(data.height);
                     //旋轉(zhuǎn)角度
                     console.log(data.rotate);
                     console.log(data.scaleX);
                     console.log(data.scaleY);*/
                },
                'zoom.cropper': function (e) {
                    // console.log(e.type, e.ratio);
                },

            }).cropper(options);
            var $inputImage = input;
            var uploadedImageURL;
            if (URL) {
                // 給input添加監(jiān)聽
                $inputImage.change(function () {
                    var files = this.files;
                    var file;
                    if (!$image.data('cropper')) {
                        return;
                    }
                    if (files && files.length) {
                        file = files[0];
                        // 判斷是否是圖像文件
                        if (/^image\/\w+$/.test(file.type)) {
                            // 如果URL已存在就先釋放
                            if (uploadedImageURL) {
                                URL.revokeObjectURL(uploadedImageURL);
                            }
                            uploadedImageURL = URL.createObjectURL(file);
                            // 銷毀cropper后更改src屬性再重新創(chuàng)建cropper
                            $image.cropper('destroy').attr('src', uploadedImageURL).cropper(options);
                            $inputImage.val('');
                        } else {
                            window.alert('請選擇一個圖像文件马僻!');
                        }
                    }
                });
            } else {
                $inputImage.prop('disabled', true).addClass('disabled');
            }
        };

        //上傳提交
        $('#submitbtn').on('click',function () {
            //獲取裁剪圖片的
            $imageinfo = $image.cropper('getCroppedCanvas',{width:300, height:300}).toDataURL( );
            //把圖片放到icon里面
            $("#icon").val($imageinfo);
        });


        //裁剪保存按鈕
        $('#btnimg').on('click',function (){
            var $target = $('#result');
            $image.cropper('getCroppedCanvas',{
                width:300, // 裁剪的長寬
                height:300
            }).toBlob(function(blob){
                /*裁剪后得到這個圖片*/
                // 裁剪后將圖片放到指定標(biāo)簽
                $target.attr('src',URL.createObjectURL(blob));
            });
        });


        //旋轉(zhuǎn)按鈕
        $('#rotate-Left').on('click',function (){
            $image.cropper("rotate",-45);
        });
        $('#rotate-Right').on('click',function (){
            $image.cropper("rotate",-45);
        });
        initCropper($image,$photoInput);

    };
    return {
        init : headimgInit
    }
}();

三、頁面定義

@section('css')
    {{--剪切頭像css--}}
    <style>
        #image {
            max-width: 100%;
        }
        .img-preview{
            width: 150px;
            height: 150px;
            overflow: hidden;
        }
        button {
            margin-top:10px;
        }
        #result {
            width: 80px;
            height: 80px;
        }
    </style>

@endsection
@section('content')
    <div class="">

        <div class="row">
            <div class="col-md-12 col-sm-12 col-xs-12">
                <div class="x_panel">
                    <div class="x_title">
                        <h2>修改圖像</h2>
                        <ul class="nav navbar-right panel_toolbox">
                            <li><a class="collapse-link"><i class="fa fa-chevron-up"></i></a>
                            </li>
                            <li><a class="close-link"><i class="fa fa-close"></i></a>
                            </li>
                        </ul>
                        <div class="clearfix"></div>
                    </div>
                    <div class="x_content">
                        <div class="col-md-12 col-sm-12 col-xs-12">
                            @if (count($errors) > 0)
                                <div class="alert alert-danger">
                                    <ul>
                                        @foreach ($errors->all() as $error)
                                            <li>{{ $error }}</li>
                                        @endforeach
                                    </ul>
                                </div>
                            @endif
                            @include('flash::message')
                                <div class="row">
                                   <div class="col-md-12 col-sm-12 col-xs-12">
                                       <label class="btn btn-danger pull-left" for="photoInput">
                                           <input type="file" class="sr-only" id="photoInput" accept="image/*">
                                           <span>打開圖片</span>
                                       </label>
                                   </div>
                                </div>

                                {{--剪切圖片核心--}}
                                <div class="row">
                                    <div class="col-md-5 col-sm-12 col-xs-12">
                                        <img id="image" src="{{Auth::user()->getUserData->headimg}}"  >
                                        <div class="btn btn-group">
                                            <button class="btn btn-danger" id="rotate-Left" ><i class="fa fa-rotate-left"></i>&nbsp;</button>
                                            <button class="btn btn-danger" id="rotate-Right" ><span class="fa fa-rotate-right"></span>&nbsp;</button>
                                            <button class="btn btn-danger"  id="btnimg">裁剪預(yù)覽</button>
                                        </div>
                                    </div>
                                    <div class="col-md-7 col-sm-12 col-xs-12">
                                        <p>預(yù)覽效果:</p>
                                        {{--預(yù)覽效果這里的div必須是這樣的樣式才能顯示--}}
                                        <div class="docs-preview clearfix">
                                            <div class="img-preview  preview-xs layui-circle"></div>
                                        </div>
                                        <P>x:<small id="imgdatax"></small> y:<small id="imgdatay"></small></P>
                                        <P>寬度:<small id="imgdatawidth"></small>px 高度:<small id="imgdataheight"></small>px</P>
                                        <br>
                                        {{--預(yù)覽效果end--}}
                                        <div >
                                            <p>裁剪結(jié)果:</p>
                                            <img class="layui-circle" src="{{Auth::user()->getUserData->headimg}}" id="result">
                                        </div>
                                        <br>
                                        <div class="row">

                                            <form id="submitForm" action="{{route('headimg')}}" method="post">
                                                {{csrf_field()}}
                                                <input type="hidden" name="user_data_img" id="user_data_img" value="{{Auth::user()->id}}"/>
                                                <input type="hidden" name="past_img" id="past_img" value="{{Auth::user()->getUserData->headimg}}"/>
                                                <input type="hidden" name="icon" id="icon"/>
                                                <input  class="btn btn-danger" type="submit" id="submitbtn" value="上傳圖像">
                                            </form>
                                        </div>
                                    </div>
                                </div>
                                {{--剪切圖片核心end--}}
                        </div>

                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection
@section('js')
    <script src="{{ asset('/backend/js/home/headimg.js')}}"></script>
    <script>
        //            開始加載
        $(function () {
            headimg.init("{{route('headimg')}}","{{csrf_token()}}");
        });
    </script>
@endsection

四注服、控制器和倉庫的代碼

1韭邓、控制器的2個方法

    public function showheadimg(Request $request){
        //防止重復(fù)提交
        $request->session()->put('register',time());
        return view('component.headimg');
    }
    //頭像圖片修改
    public function headimg(Request $request){
        if($request->session()->has('register')){
            //存在則表示是首次提交措近,清空session中的'register'
            $request->session()->forget('register');
            $imgname = $this->home->upimgage($request->all());
//        更新數(shù)據(jù)庫圖片名稱
            User_Data::Where('user_id',$request->all()['user_data_img'])->update(["headimg" => $imgname]);
        }else{
            //否則拋http異常,跳轉(zhuǎn)到403頁面
            flash("不能重復(fù)提交",'error');
        }
        return view('component.headimg');
    }

2女淑、倉庫代碼(這里重要接受圖片數(shù)據(jù)并且保存然后返回圖面路徑和名字)

//        上傳圖片
    public function upimgage($img){
        if(empty($img)){
            flash("上傳失敗",'error');
            return view('admin.home.userdata');
        }else{
              header('Content-type:text/html;charset=utf-8');
             $base64_image_content = $img['icon'];
            //將base64編碼轉(zhuǎn)換為圖片保存瞭郑、、
            if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)) {
                $type = $result[2];
                //絕對路徑
                $new_file = "".public_path()."/backend/images/uploads/";
                if (!file_exists($new_file)) {
                    //檢查是否有該文件夾鸭你,如果沒有就創(chuàng)建屈张,并給予最高權(quán)限
                    mkdir($new_file, 0700);
                }
                $imgname="img".time() . ".{$type}";
                $new_file = $new_file . $imgname;
                //將圖片保存到指定的位置base64_decode把base64進(jìn)行解碼file_put_contents把字符串新到文件里面沒有文件就從新創(chuàng)建一個
                if (file_put_contents($new_file, base64_decode(str_replace($result[1],'', $base64_image_content)))) {
                     // 刪除以前的圖像用Storage::delete()修改了filesystems文件的默認(rèn)路徑
                    if(Storage::delete($img['past_img'])){
                        flash("上傳成功",'success');
                    }
                    //保存成功返回這個相對路徑和圖片名字
                    return '/backend/images/uploads/'.$imgname;
                }else{
                    return 'false';
                }
            }else{
                return 'false';
            }
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市袱巨,隨后出現(xiàn)的幾起案子阁谆,更是在濱河造成了極大的恐慌,老刑警劉巖愉老,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件联喘,死亡現(xiàn)場離奇詭異珊蟀,居然都是意外死亡围详,警方通過查閱死者的電腦和手機(jī)椒惨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劝贸,“玉大人,你說我怎么就攤上這事逗宁∮尘牛” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵瞎颗,是天一觀的道長件甥。 經(jīng)常有香客問我,道長哼拔,這世上最難降的妖魔是什么引有? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮倦逐,結(jié)果婚禮上譬正,老公的妹妹穿的比我還像新娘。我一直安慰自己檬姥,他們只是感情好曾我,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著健民,像睡著了一般抒巢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上秉犹,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天蛉谜,我揣著相機(jī)與錄音稚晚,去河邊找鬼。 笑死型诚,一個胖子當(dāng)著我的面吹牛客燕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播俺驶,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼幸逆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了暮现?” 一聲冷哼從身側(cè)響起还绘,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎栖袋,沒想到半個月后拍顷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡塘幅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年昔案,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片电媳。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡踏揣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出匾乓,到底是詐尸還是另有隱情捞稿,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布拼缝,位于F島的核電站娱局,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏咧七。R本人自食惡果不足惜衰齐,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望继阻。 院中可真熱鬧耻涛,春花似錦、人聲如沸瘟檩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芒帕。三九已至歉嗓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間背蟆,已是汗流浹背鉴分。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工哮幢, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人志珍。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓橙垢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親伦糯。 傳聞我的和親對象是個殘疾皇子柜某,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容