base64上傳圖片

示例
html

<form name="form1" method="post" action="xxxxx" onSubmit="return chkfrm(this);" >
	<img src="/images/download.jpg" class="img-circle" />
	<input type="file" id="headimgurl" name='headimgurl' accept="image/*" style="display:none" value=""/>
    <input type="text" id="logopicbase" name='logopicbase' style="display:none" value=""/>
</form>

jq

$(".img-circle").click(function () {
        $("#headimgurl").click(); //隱藏了input:file樣式後,點擊頭像就可以本地上傳
        $("#headimgurl").on("change",function(){
            var objUrl = getObjectURL(this.files[0]) ; //獲取圖片的路徑,該路徑不是圖片在本地的路徑
            if (objUrl) {
                $(".img-circle").attr("src", objUrl) ; //將圖片路徑存入src中,顯示出圖片
                var image = new Image();
                image.crossOrigin = '';
                image.src = objUrl;
                image.onload = function(){
                    var base64 = getBase64Image(image);
                    // console.log(base64);
                    $("#logopicbase").val(base64) ;
                };
                var file = $("#headimgurl") ;//清空input的file值
                file.after(file.clone().val(""));
                file.remove();
            }else{
                layer.open({
                    content: '上傳錯誤',
                    time: 2
                });
            }
        });
    });

    //建立一個可存取到該file的url
    function getObjectURL(file) {
        var url = null ;
        if (window.createObjectURL!=undefined) { // basic
            url = window.createObjectURL(file) ;
        } else if (window.URL!=undefined) { // mozilla(firefox)
            url = window.URL.createObjectURL(file) ;
        } else if (window.webkitURL!=undefined) { // webkit or chrome
            url = window.webkitURL.createObjectURL(file) ;
        }
        return url ;
    }

    //生成圖片的base64編碼
    function getBase64Image(img) {
        var canvas = document.createElement("canvas");
        var width = img.width;
        var height = img.height;
        // 按比例壓縮2倍
        var rate = (width<height ? width/height : height/width)/2;
        //原比例生成畫布圖片
        // var rate = 1;
        canvas.width = width*rate;//畫布寬
        canvas.height = height*rate;
        // console.log(canvas);
        var ctx = canvas.getContext("2d");
        ctx.drawImage(img, 0, 0, width, height, 0, 0, width * rate, height * rate);
        var ext = img.src.substring(img.src.lastIndexOf(".")+1).toLowerCase();
        var dataURL = canvas.toDataURL("image/"+ext);
        return dataURL;
    }

php

if (!empty($_POST['logopicbase'])) {
                $base64_image_content = $_POST['logopicbase'];
					//匹配出圖片的格式
                if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)) {
                    $type = $result[2];
                    $new_file_date = date('Ymd', time());
                    $new_file = "./uploads/image/" . $new_file_date . "/";//文件存儲位置
                    if (!file_exists($new_file)) {
                        //檢查是否有該文件夾,如果沒有就創建,並給予最高權限
                        mkdir($new_file, 0700);
                    }
                    $time = time();
                    $new_file = $new_file . $time . ".{$type}";
                    $src = "/uploads/image/" . $new_file_date . "/". $time . ".{$type}";
                    //生成圖片file_put_contents(filename,data);filename:要被寫入數據的文件名;data要寫入的數據。類型可以是 string,array 或者是 stream 資源
                    //$base64_string= explode(',', $base64_string); //截取data:image/png;base64, 這個逗號後的字符
					//$data= base64_decode($base64_string[1]);  //對截取後的字符使用base64_decode進行解碼
                    if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_image_content)))) {
                        $rootPath =__ROOT__.$src;
                        $data['headimgurl']=$rootPath;//將修改後路徑存到數據庫
                    } else {
                        $this->error('圖片保存失敗',U('index',array('wsid'=>$wsshop['id'])));
                    }
                }
                unset($_POST['logopicbase']);
            }

上傳多張圖片示例
html

<form>
	<p>曬曬你的圖片</p>
                                <img src="/imgs/add-button.jpg" id="{$vo['gid']}" class="img-circle" data-id="{$vo['id']}">
                                <input type="file" id="compic{$vo['id']}" name="compic{$vo['id']}" accept="image/*" style="display:none" value=""/>
                                <input type="text" id="compicbase{$vo['id']}" name="compicbase{$vo['id']}" style="display:none" value=""/>
                                <div class="showpics{$vo['id']}">

                                </div>
</form>

jq

	$(".img-circle").click(function () {

        var id= $(this).data("id");
        var gid = $(this).attr("id");
        var countimg = $(".showpics"+id+" > img").length;
        if(countimg>=8){
            alert('最多隻能上傳8張圖片');
        }else{
            $("#compic"+id).click(); //隱藏了input:file樣式後,點擊頭像就可以本地上傳
            $("#compic"+id).on("change",function(){
                var objUrl = getObjectURL(this.files[0]) ; //獲取圖片的路徑,該路徑不是圖片在本地的路徑
                if (objUrl) {

                    // $("#showpic"+id).attr("src", objUrl) ; //將圖片路徑存入src中,顯示出圖片
                    var image = new Image();
                    image.crossOrigin = '';
                    image.src = objUrl;
                    image.onload = function(){
                        var base64 = getBase64Image(image);
                        // console.log(base64);
                        // $("#logopicbase"+id).val(base64) ;
                        var showimg = "<img src='"+objUrl+"' class='img-thumbnail'>";//添加圖片顯示
                        showimg += "<input type='text' name='compicbase"+gid+"[]' value='"+base64+"' style='display: none;'>";//添加post傳值
                        $(".showpics"+id).append(showimg);//顯示

                    };
                    var file = $("#compic") ;//清空input 的file值,否則會出現第一次一張,第二次兩張,3次3張....
                    file.after(file.clone().val(""));
                    file.remove();
                }
            });
        }

    });

    //建立一個可存取到該file的url
    function getObjectURL(file) {
        var url = null ;
        if (window.createObjectURL!=undefined) { // basic
            url = window.createObjectURL(file) ;
        } else if (window.URL!=undefined) { // mozilla(firefox)
            url = window.URL.createObjectURL(file) ;
        } else if (window.webkitURL!=undefined) { // webkit or chrome
            url = window.webkitURL.createObjectURL(file) ;
        }
        return url ;
    }

    //生成圖片的base64編碼
    function getBase64Image(img) {
        var canvas = document.createElement("canvas");
        var width = img.width;
        var height = img.height;
        // 按比例壓縮2倍
        var rate = (width<height ? width/height : height/width)/2;
        //原比例生成畫布圖片
        // var rate = 1;
        canvas.width = width*rate;//畫布寬
        canvas.height = height*rate;
        // console.log(canvas);

        var ctx = canvas.getContext("2d");
        ctx.drawImage(img, 0, 0, width, height, 0, 0, width * rate, height * rate);
        //img:規定要使用的圖像、畫布或視頻。; 0, 0,:x y座標起始剪切位置; width, height,:可選。被剪切圖像的寬高度
        // 0, 0,:在畫布上放置圖像的 x y座標位置;width * rate, height * rate:可選。要使用的圖像的寬高度。(伸展或縮小圖像)
        var ext = img.src.substring(img.src.lastIndexOf(".")+1).toLowerCase();
        var dataURL = canvas.toDataURL("image/"+ext);
        return dataURL;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章