成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

關于手機端拍照上傳圖片的問題

jifei / 2619人閱讀

摘要:關于移動端拍照上傳圖片的解決方案場景產(chǎn)品要求用戶拍一張身份證和一張人像,然后后臺調(diào)用商用接口比對證件和人像的匹配度。缺點手機拍照圖片過大,壓縮后,圖片依然大,沒上傳一次花費時間過長,最后再調(diào)用接口比對時間花費也長。

關于移動端拍照上傳圖片的解決方案

場景

產(chǎn)品要求用戶拍一張身份證和一張人像,然后后臺php調(diào)用商用接口比對證件和人像的匹配度。
方案1:使用上傳插件web-upload

證件和人像分別上傳到后臺,然后返回圖片地址,前端回顯。

點擊核驗按鈕,ajax再將返回的圖片地址傳到后臺,后臺將地址轉(zhuǎn)成bases64,調(diào)用接口比對,返回結果。

缺點

手機拍照圖片過大,webupload壓縮后,圖片依然大,沒上傳一次花費時間過長,最后再調(diào)用接口比對時間花費也長。

webupload的樣式需要重新定義

.webuploader-pick {
        display: inline-block;
        width: 1.6rem;
        height: 1.6rem;
        position: absolute;
        left: 50%;
        top: 50%;
        -webkit-transform: translate(-50%, -50%);
        transform: translate(-50%, -50%);
        background-color: transparent;
    }

webupload的input框沒辦法限制用戶只能調(diào)用攝像頭。(webupload加載完成后會生成一個input框,但是頁面加載后不能重新給input添加屬性,只有在上傳中才能獲取到).

方案2:使用原生的H5對象完成上傳

用戶點擊input按鈕,調(diào)用FileReader對象生成file.

利用canvas壓縮圖片,context進行繪圖回顯。

再將base64碼dataURL轉(zhuǎn)為file.

利用FormData對象追加file.發(fā)送后臺。

后臺$_FILES接受后,轉(zhuǎn)為base64發(fā)送到接口,獲取結果。

缺點
1.流程稍顯復雜。
2.兼容性問題。
   // 掃描身份證
        $(".input-card").on("change", function () {
            var oFReader = new FileReader();
            var card_files = document.getElementById("card-file").files[0];
            oFReader.readAsDataURL(card_files);
            oFReader.onloadend = function (oFRevent) {
                img = new Image();
                img.src = oFRevent.target.result;
                img.onload = function () {
                    // 獲取照片信息 等于6時照片會旋轉(zhuǎn)90°
                    var photo = getPhotoOrientation(img);
                    // 壓縮圖片
                    var compress_data = compress(img);
                    // 將圖片url轉(zhuǎn)為file類型 (直接base64傳到后臺始終太大了)
                    card_img_file = dataURLtoFile(compress_data, "img.png");
                    $(".crad-img").attr("src", img.src);
                    //$("#compress_card").attr("src", imgfile);
                }
                // 太大就進行壓縮
            }
        })
        
        // 圖片壓縮
        function compress(img) {
            canvas.width = img.width
            canvas.height = img.height
            //利用canvas進行繪圖
            context.drawImage(img, 0, 0); // 重要
            //將原來圖片的質(zhì)量壓縮到原先的0.2倍。
            var data = canvas.toDataURL("image/jpeg", 0.1) //data url的形式
            return data
        }
          // base64 轉(zhuǎn)file
        function dataURLtoFile(dataurl, filename) {
            var arr = dataurl.split(","),
                mime = arr[0].match(/:(.*?);/)[1],
                bstr = atob(arr[1]),
                n = bstr.length,
                u8arr = new Uint8Array(n);
            while (n--) {
                u8arr[n] = bstr.charCodeAt(n);
            }
            return new File([u8arr], filename, {
                type: mime
            });
        }
        //獲取照片的元信息(拍攝方向)
        function getPhotoOrientation(img) {
            var orient;
            EXIF.getData(img, function () {
                orient = EXIF.getTag(this, "Orientation");
            });
            return orient;
        }
         //確定核驗
        $("#saveDate").on("click", function () {
            var _token = $("meta[name="csrf-token"]").attr("content");
            var formData = new FormData();
            formData.append("_token", _token); // 追加token
            formData.append("order_room_id", order_room_id); // 追加其他項目參數(shù)
            formData.append("face_img_file", face_img_file); // 追加文件
            formData.append("card_img_file", card_img_file);
            msg = layer.open({
                type: 2,
                content: "核驗中"
            });
            $.ajax({
                url: "/check-in/ajax-real",
                type: "post",
                data: formData,
                cache: false,
                processData: false, // 必填參數(shù)
                contentType: false, // 必填參數(shù)
                async: false,
                dataType: "json",
                success: function (data) {
                    layer.close(msg);
                    if (data.status == "success") {
                        layer.open({
                            content: data.msg,
                            skin: "msg",
                            time: 2,
                            end: function (layero, index) {
                                // 跳轉(zhuǎn)table頁
                                window.location.href =
                                    "{{Route("check.table",["num"=>$total_num,"order_room_id"=>$order_room_id])}}";
                            }
                        });
                    } else {
                        layer.open({
                            content: data.msg,
                            skin: "msg",
                            time: 3
                        });
                    }
                }

            });
        })

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31445.html

相關文章

  • 微信JSSDK 實現(xiàn)打開攝像頭拍照再將相片保存到服務器

    摘要:在微信端打開手機攝像頭拍照,將拍照圖片保存到服務器上需要使用到微信的接口,主要使用到了拍照或從手機相冊中選圖接口上傳圖片接口參考資料一引入微信二通過接口注入權限驗證配置三微信端拍照接口默認可以指定是原圖還是壓縮圖,默認二者都有可以指 在微信端打開手機攝像頭拍照,將拍照圖片保存到服務器上需要使用到微信的JSSDK接口,主要使用到了拍照或從手機相冊中選圖接口(chooseImage),上傳...

    yy13818512006 評論0 收藏0
  • 移動圖片上傳旋轉(zhuǎn)、壓縮解決方案

    摘要:上傳的文件經(jīng)過就可以實現(xiàn)預覽圖片了,這方面不清楚的可以查看進階系列文件上傳下載旋轉(zhuǎn)旋轉(zhuǎn)需要用到的方法。 前言 在手機上通過網(wǎng)頁 input 標簽拍照上傳圖片,有一些手機會出現(xiàn)圖片旋轉(zhuǎn)了90度d的問題,包括 iPhone 和個別三星手機。這些手機豎著拍的時候才會出現(xiàn)這種問題,橫拍出來的照片就正常顯示。因此,可以通過獲取手機拍照角度來對照片進行旋轉(zhuǎn),從而解決這個問題。 Orientatio...

    blair 評論0 收藏0
  • H5拍照、預覽、壓縮、上傳采坑記錄

    摘要:拍照預覽壓縮上傳采坑記錄公司項目前段時間需要實現(xiàn)手機拍照上傳的功能,本來以為用和可以很輕松的實現(xiàn),結果發(fā)現(xiàn)問題多多,特此記錄下來。完整代碼如下如果不支持壓縮,直接上傳原始圖片組裝二進制組裝參考文章 H5拍照、預覽、壓縮、上傳采坑記錄 公司項目前段時間需要實現(xiàn)手機拍照上傳的功能,本來以為用createObjectURL和canvas可以很輕松的實現(xiàn),結果發(fā)現(xiàn)問題多多,特此記錄下來。 DE...

    gself 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<