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

資訊專欄INFORMATION COLUMN

H5拍照、預(yù)覽、壓縮、上傳采坑記錄

gself / 2903人閱讀

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

H5拍照、預(yù)覽、壓縮、上傳采坑記錄

公司項(xiàng)目前段時(shí)間需要實(shí)現(xiàn)手機(jī)拍照上傳的功能,本來以為用createObjectURL和canvas可以很輕松的實(shí)現(xiàn),結(jié)果發(fā)現(xiàn)問題多多,特此記錄下來。

DEMO預(yù)覽(需用新標(biāo)簽頁打開)

圖片預(yù)覽

在IOS上,豎著拍照片時(shí),圖片預(yù)覽會(huì)旋轉(zhuǎn)90°,橫著拍照就沒問題,我實(shí)驗(yàn)了一下,在IOS上,只有當(dāng)圖片的分辨率過大會(huì)出現(xiàn)這種情況。

最后實(shí)現(xiàn)圖片預(yù)覽效果借助了exif-js和megapix-image,exif-js負(fù)責(zé)讀取圖片的EXIF信息,獲取orientation信息,然后用megapix-image把圖片數(shù)據(jù)渲染在img標(biāo)簽上,代碼如下:

import EXIF from "../utils/exif";
import MegaPixImage from "../utils/megapix-image";
     /**
     * 
     * @param file file對(duì)象
     * @param resImg 預(yù)覽IMG標(biāo)簽
     * @returns {Promise}
     */
    renderPreviewImg(file, resImg) {
        return new Promise(function (resolve, reject) {
            EXIF.getData(file, _=> {
                var allMetaData = EXIF.getAllTags(file);
                var orientation = allMetaData.Orientation;

                var mpImg = new MegaPixImage(file);

                mpImg.render(resImg, {
                    maxWidth: 1024,
                    maxHeight: 1024,
                    // quality: 0.6,
                    orientation: orientation
                }, resolve);

            });
        });


    }
無刷新壓縮上傳

思路有兩種:

用canvas的toDataURL()API,直接將base64文本傳遞過去

自己構(gòu)造File對(duì)象,ajax上傳

第一種方法需要服務(wù)器端做工作,而且上傳數(shù)據(jù)量會(huì)增大4/3,因此此方法只作為回退方案。

第二種方法的原理是用Uint8Array來構(gòu)造Blob,再使用formData上傳。
這里要注意的是:ArrayBuffer不能被直接操作,必須通過typed array來存取,而且Blob的構(gòu)造函數(shù)也是typed array

完整代碼如下:

     this.renderPreviewImg(file, resImg)
            .then(() => {

                try {
                    var binaryData = null;

                    if (!Blob || !ArrayBuffer || !Uint8Array) {
                        // alert(123);
                        binaryData = file;//如果不支持壓縮,直接上傳原始圖片

                    } else {
                        //組裝二進(jìn)制
                        var base64Data = $(resImg).attr("src");
                        var byteString = atob(base64Data.split(",")[1]);
                        var ab = new ArrayBuffer(byteString.length);
                        var ia = new Uint8Array(ab);
                        for (var i = 0; i < byteString.length; i++) {
                            ia[i] = byteString.charCodeAt(i);
                        }
                        binaryData = new Blob([ia], {
                            "type": file.type
                        });

                    }

                    this.setState({
                        uploadProgress: 0
                    });

                    //組裝formData
                    var fd = new FormData();
                    fd.append("file", binaryData, "img.jpg");
                    fd.append("token", uploadToken);

                    console.log(fd);

                    return this.uploadBinaryDataToQiniu(fd, this.uploadSuccess.bind(this), this.handleUploadProgress.bind(this))


                } catch (e) {
                    alert(e.message);
                }
            }).catch(function (e) {
            console.log(e);
        })
參考文章

http://tgideas.qq.com/webplat...

http://blog.csdn.net/hsany330...

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

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

相關(guān)文章

  • H5拍照、選擇圖片上傳組件核心

    摘要:決定自己寫一個(gè)移動(dòng)端圖片上傳組件。允許多選,加上事件的回調(diào)函數(shù)。在的回調(diào)函數(shù)中,我們能通過拿到所選擇的文件,但是文件是無法展示在頁面上的,通常的做法是使用轉(zhuǎn)為然后展示在頁面上。 背景 前段時(shí)間項(xiàng)目重構(gòu),改成SSR的項(xiàng)目,但之前用的圖片選擇上傳組件不支持SSR(server-side-render)。遂進(jìn)行了調(diào)研,發(fā)現(xiàn)很多的工具。但有的太大,有的使用麻煩,有的不滿足使用需求。決定自己寫一...

    Guakin_Huang 評(píng)論0 收藏0
  • 關(guān)于手機(jī)端拍照上傳圖片的問題

    摘要:關(guān)于移動(dòng)端拍照上傳圖片的解決方案場(chǎng)景產(chǎn)品要求用戶拍一張身份證和一張人像,然后后臺(tái)調(diào)用商用接口比對(duì)證件和人像的匹配度。缺點(diǎn)手機(jī)拍照?qǐng)D片過大,壓縮后,圖片依然大,沒上傳一次花費(fèi)時(shí)間過長(zhǎng),最后再調(diào)用接口比對(duì)時(shí)間花費(fèi)也長(zhǎng)。 關(guān)于移動(dòng)端拍照上傳圖片的解決方案 場(chǎng)景 產(chǎn)品要求用戶拍一張身份證和一張人像,然后后臺(tái)php調(diào)用商用接口比對(duì)證件和人像的匹配度。showImg(https://segment...

    jifei 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

gself

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<