上传本地图片兼容苹果安卓 苹果90度问题已解决

下载 exif.js文件   http://code.ciaoca.com/javascript/exif-js/

html:

<canvas class="i-img1" id="i-img1" width="550px" height="460px"></canvas>

<div class="b2-3"><input class="i-input1" id="i-input1" type="file" accept="image/*" /></div>


css:

.i-img1{margin: 316px 0 0 38px; border: 2px solid black;}

.b2-3{margin: 304px 0 0 7px;background: url("") no-repeat center center; width: 141px;height: 41px;}


重点来了

js:

var  picture_src;

 //从相册选择照片
    $('.i-input1').change(function(){
        //判断安卓苹果手机
        var u = navigator.userAgent;
        var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
        var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
        //图片方向角 added by lzk
        var Orientation = null;
        //上传文件
        var file=this.files[0];
        if(file){
            //读取文件
            var reader=new FileReader();
            //将文件以Data URL形式读入页面
            reader.readAsDataURL(file);
            reader.οnlοad=function(){
                // 通过 reader.result 来访问生成的 DataURL
                var url=reader.result;
                setImageURL(url);
            };
            var image=new Image();
            function setImageURL(url){
                image.src=url;
            }
            EXIF.getData(file, function() {
                //alert(EXIF.pretty(this));
                EXIF.getAllTags(this);
                //alert(EXIF.getTag(this, 'Orientation'));
                Orientation = EXIF.getTag(this, 'Orientation');
            });

            var canvas=document.getElementById("i-img1");
            var ctx=canvas.getContext('2d');
            image.onload = function(){
                var old_width;
                var old_height;
                var div_width=$("#i-img1").width();
                old_width=image.width;
                old_height=image.height;
                var scale_x=div_width*old_width/old_height;
                var scale_y=div_width*old_height/old_width;
                //清除
                ctx.clearRect(0,0,canvas.width,canvas.height);
                //苹果手机
                //alert(Orientation);
                if(isiOS){
                    if(Orientation == 6){
                                var degree =90*Math.PI/180;
                                ctx.rotate(degree);
                                ctx.drawImage(image,0,0,old_width,old_height,-(scale_x-div_width)/2,-div_width,scale_x,div_width);
                        ctx.rotate(-degree);
                    }else if(Orientation == undefined || Orientation == '' || Orientation == 1 ){
                        if(old_height>old_width){
                            ctx.drawImage(image,0,0,old_width,old_height,0,-(scale_y-div_width)/2,div_width,scale_y);
                        }else{
                            ctx.drawImage(image,0,0,old_width,old_height,-(scale_x-div_width)/2,0,scale_x,div_width);
                        }
                    }
                }else if(isAndroid){
                    if(old_height>old_width){
                        ctx.drawImage(image,0,0,old_width,old_height,0,-(scale_y-div_width)/2,div_width,scale_y);
                    }else{
                        ctx.drawImage(image,0,0,old_width,old_height,-(scale_x-div_width)/2,0,scale_x,div_width);
                    }
                }


//提交

注意这一部分是获取到图片的64位 路径  picture_src直接当路径使用
                $('.obj').on(touchstart, function () {

                    var data=canvas.toDataURL();
                    data=data.split(',')[1];
                    data=window.atob(data);
                    var ia = new Uint8Array(data.length);
                    for (var i = 0; i < data.length; i++) {
                        ia[i] = data.charCodeAt(i);
                    };
                    var blob=new Blob([ia], {type:"image/png"});
                    picture_src=window.URL.createObjectURL(blob);

                })


            }
        }
    });


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值