成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

解決移動(dòng)端iOS下上傳圖片被旋轉(zhuǎn)問(wèn)題。

zhunjiee / 2963人閱讀

摘要:下上傳圖片被旋轉(zhuǎn)解決方法用既然是解決問(wèn)題,那就簡(jiǎn)單說(shuō)一下,直接上代碼方式使用在上可以直接調(diào)用照相機(jī)拍照,豎拍出來(lái)的圖片都會(huì)變成橫圖思路獲取到照片拍攝的方向角,對(duì)非橫拍的照片使用的進(jìn)行角度旋轉(zhuǎn)修正。

iOS下html上傳圖片被旋轉(zhuǎn)

解決方法用exif.js+canvas

既然是解決問(wèn)題,那就簡(jiǎn)單說(shuō)一下,直接上代碼!

html方式使用在iOS上可以直接調(diào)用照相機(jī)拍照,豎拍出來(lái)的圖片都會(huì)變成橫圖!

思路:獲取到照片拍攝的方向角,對(duì)非橫拍的ios照片使用canvas的rotate進(jìn)行角度旋轉(zhuǎn)修正。

頁(yè)面引入exif.js 網(wǎng)盤(pán)分享給你吧http://pan.baidu.com/s/1geNuzGf

利用exif.js讀取照片的拍攝信息,詳見(jiàn) http://code.ciaoca.com/javasc...

這里主要用到Orientation屬性。

   EXIF.getData(_ImgFile,  function() {     //_ImgFile圖片數(shù)據(jù)
    var Orientation = EXIF.getTag(this, "Orientation");   
     return Orientation                   //Orientation返回的參數(shù) 1 、3 、6 、8
    }); 
  

Orientation 參數(shù) 1、3、6、8 對(duì)應(yīng)的你需要旋轉(zhuǎn)的角度

1   0°
3   180°    
6   順時(shí)針90°
8   逆時(shí)針90°

ios拍出來(lái)照片信息里面Orientation 是6 順時(shí)針90°

         switch(Orientation){
                                case 6:     // 旋轉(zhuǎn)90度
                                    widthORheight=0;
                                    cvs.width = this.height * scale;
                                    cvs.height = this.width * scale;
                                    ctx.rotate(Math.PI / 2);
                                    // (0,-imgHeight) 從旋轉(zhuǎn)原理圖那里獲得的起始點(diǎn)
                                    ctx.drawImage(this, 0,-this.height * scale,  this.width * scale, this.height * scale  );
                                    break;
                                case 3:     // 旋轉(zhuǎn)180度
                                    ctx.rotate(Math.PI);
                                    ctx.drawImage(this, -this.width * scale, -this.height * scale,  this.width * scale, this.height * scale);
                                    break;
                                case 8:     // 旋轉(zhuǎn)-90度
                                    widthORheight=0;
                                    cvs.width = this.height * scale;
                                    cvs.height = this.width * scale;
                                    ctx.rotate(3 * Math.PI / 2);
                                    ctx.drawImage(this, - this.width * scale, 0,  this.width * scale, this.height * scale);
                                    break;

                            }


      

全部代碼

htlm:

  
   

    css 隨意

    js

            // 轉(zhuǎn)換blob對(duì)象用于上傳
            function dataURLtoBlob(dataurl) {
                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 Blob([u8arr], {type:mime});
            }
            
        
        var imgBlobIndex=[];  //存放多張圖片的的容器。用于多張圖片上傳或者刪除多張圖片中某一張圖片,
            
    
         $("#showImg").change(function() {
            var listNunber=$("#fileList").find("img").length,
                Orientation = null,
                _this = $(this)[0],
                _leng = this.files.length,
                maxSize = 2500000,// 限制單張大小2.5M
                minSize=100000;   //壓縮臨界 1M
               
                    for (var j = 0; j < _leng; j++) {
                        var _filelist = _this.files[j],
                            fileType = _filelist.type,
                            size = _filelist.size;     //獲取圖片的大小
                        if (size < maxSize) {        
                                                      //獲取圖片Orientation參數(shù)
                            EXIF.getData(_filelist, function() {
                                Orientation = EXIF.getTag(this, "Orientation");
                            });
                             
                            var fileReader = new FileReader();
                            fileReader.readAsDataURL(_filelist);
                            fileReader.onload = function (event) {
                                var result = event.target.result;   //返回的dataURL
                                var image = new Image();
                                image.src = result;
                                image.onload = function () {//創(chuàng)建一個(gè)image對(duì)象,給canvas繪制使用
    
                                    var cvs = document.createElement("canvas");
                                    var ctx = cvs.getContext("2d");
                                    var scale = 1;          //預(yù)留壓縮比
                        
                                    cvs.width = this.width * scale;
                                    cvs.height = this.height * scale;//計(jì)算等比縮小后圖片寬高
    
                                    if(Orientation && Orientation != 1){
                                        switch(Orientation){
                                            case 6:     // 旋轉(zhuǎn)90度
                                                
                                                cvs.width = this.height * scale;
                                                cvs.height = this.width * scale;
                                                ctx.rotate(Math.PI / 2);
                                                // (0,-imgHeight) 從旋轉(zhuǎn)原理圖那里獲得的起始點(diǎn)
                                                ctx.drawImage(this, 0,-this.height * scale,  this.width * scale, this.height * scale  );
                                                break;
                                            case 3:     // 旋轉(zhuǎn)180度
                                                ctx.rotate(Math.PI);
                                                ctx.drawImage(this, this.width * scale, -this.height * scale,  this.width * scale, this.height * scale);
                                                break;
                                            case 8:     // 旋轉(zhuǎn)-90度
                                            
                                                cvs.width = this.height * scale;
                                                cvs.height = this.width * scale;
                                                ctx.rotate(3 * Math.PI / 2);
                                                ctx.drawImage(this, - this.width * scale, 0,  this.width * scale, this.height * scale);
                                                break;
    
                                        }
                                    }else{
                                        ctx.drawImage(this, 0, 0,  cvs.width, cvs.height);
                                    }
                                   /* ctx.drawImage(this, 0, 0, cvs.width, cvs.height);*/
                                    if(size";  //創(chuàng)建預(yù)覽對(duì)象
                                    imgid++;
                                    i++;
                                    $("#fileList").append(img);   //圖片預(yù)覽容器
    
                                    
                                    var imgdata=dataURLtoBlob(newImageData);  //  創(chuàng)建blob 用于上傳
                                    imgBlobIndex.push(imgdata);                   //多張圖片時(shí)上傳用
                                                                    
                                };
                            };
                        }else {    
                          alert("您照片大小超過(guò)2.5M了,請(qǐng)更換照片")
                        }
                    }
               
          
        });

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

    轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/89162.html

    相關(guān)文章

    • 移動(dòng)圖片上傳踩坑記錄(包括 平移 縮放 旋轉(zhuǎn) 裁切)

      摘要:上傳圖片順時(shí)針旋轉(zhuǎn)度問(wèn)題使用獲取圖片當(dāng)前拍攝角度修正后展示裁切位置不正確或需要減去的差值問(wèn)題描述當(dāng)目標(biāo)元素的上級(jí)元素中有使用時(shí),用如上的方法都會(huì)導(dǎo)致計(jì)算錯(cuò)誤,這一在常用框架,類(lèi)庫(kù)中都存在。應(yīng)該是和在實(shí)現(xiàn)上的差異造成了。 bug1.ios 上傳圖片 順時(shí)針旋轉(zhuǎn)90度問(wèn)題 solution1.使用exif.js獲取圖片當(dāng)前拍攝角度 修正后展示 http://www.mamicode.com...

      Richard_Gao 評(píng)論0 收藏0
    • 用exfe.js和canvas解決移動(dòng) IOS 拍照上傳圖片翻轉(zhuǎn)問(wèn)題

      前言 記得16年的時(shí)候我初入前端差不多一年,公司做了一個(gè)webapp,有上傳頭像功能,當(dāng)時(shí)這個(gè)項(xiàng)目不是我在負(fù)責(zé),測(cè)試的時(shí)候發(fā)現(xiàn)蘋(píng)果用戶(hù)拍照上傳頭像會(huì)翻轉(zhuǎn),當(dāng)時(shí)幾個(gè)前端的同學(xué)捯飭了一下午也沒(méi)解決,結(jié)果問(wèn)題轉(zhuǎn)到我這里,還有半個(gè)小時(shí)下班;當(dāng)時(shí)也是一臉懵逼,首先想到的是,這怎么判斷它是否翻轉(zhuǎn)了呢?安卓沒(méi)問(wèn)題啊,有些蘋(píng)果手機(jī)相冊(cè)里面的圖片也沒(méi)問(wèn)題啊,js能有這種功能判斷嗎?上網(wǎng)查資料,果不其然,有!那就是e...

      leap_frog 評(píng)論0 收藏0
    • 移動(dòng)上傳圖片翻轉(zhuǎn)的解決方案

      摘要:后續(xù)過(guò)了幾天,公司購(gòu)置了幾臺(tái)全新的測(cè)試機(jī),測(cè)試同學(xué)將系統(tǒng)在一臺(tái)三星的機(jī)子上一測(cè),又發(fā)現(xiàn)新問(wèn)題了選擇完圖片進(jìn)行本地預(yù)覽時(shí),發(fā)現(xiàn)圖片翻轉(zhuǎn)了但上傳后再展示又是正常的。 最近在處理移動(dòng)端選擇圖片實(shí)時(shí)預(yù)覽并上傳時(shí)遇到一個(gè)問(wèn)題:上傳前圖片預(yù)覽正常,但上傳到服務(wù)器上的圖片展示到頁(yè)面上時(shí),有時(shí)會(huì)出現(xiàn)圖片翻轉(zhuǎn)的問(wèn)題,一般是翻轉(zhuǎn) 90 度。后經(jīng)一翻研究找到了問(wèn)題所在,特在此記錄一下。 問(wèn)題描述 接上面提到...

      shinezejian 評(píng)論0 收藏0
    • 移動(dòng)H5圖片上傳的那些坑

      摘要:上周做一個(gè)關(guān)于移動(dòng)端圖片壓縮上傳的功能。利用,進(jìn)行圖片的壓縮,得到圖片的的值上傳文件。 上周做一個(gè)關(guān)于移動(dòng)端圖片壓縮上傳的功能。期間踩了幾個(gè)坑,在此總結(jié)下。 大體的思路是,部分API的兼容性請(qǐng)參照caniuse: 利用FileReader,讀取blob對(duì)象,或者是file對(duì)象,將圖片轉(zhuǎn)化為data uri的形式。 使用canvas,在頁(yè)面上新建一個(gè)畫(huà)布,利用canvas提供的API,...

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

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

    0條評(píng)論

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