Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过手机加载时,画布图像将图像旋转90度_Javascript_Html_Image_Canvas_Html5 Canvas - Fatal编程技术网

Javascript 通过手机加载时,画布图像将图像旋转90度

Javascript 通过手机加载时,画布图像将图像旋转90度,javascript,html,image,canvas,html5-canvas,Javascript,Html,Image,Canvas,Html5 Canvas,我正在尝试制作一个小的画布功能,它可以让你上传一张图片,并在上面添加一个覆盖层。我让它上传,在上面创建一个图像并下载,但当我试图通过手机上传图像时。它将图像旋转90度 我是不是遗漏了什么?在将图像添加到画布之前,我是否必须测试图像的大小并对其进行缩放 任何帮助都是很大的帮助,谢谢 <style> .box{ width: 300px; height: 300px; border: 1px solid blue;

我正在尝试制作一个小的画布功能,它可以让你上传一张图片,并在上面添加一个覆盖层。我让它上传,在上面创建一个图像并下载,但当我试图通过手机上传图像时。它将图像旋转90度

我是不是遗漏了什么?在将图像添加到画布之前,我是否必须测试图像的大小并对其进行缩放

任何帮助都是很大的帮助,谢谢

  <style>
    .box{
        width: 300px;
        height: 300px;
        border: 1px solid blue;
        padding: 1em;
    }
    .wrap{
        width: 180px;
        height: 180px;
        margin: 0 auto;
        background: red;
        position: relative;
    }
</style>
        <div class="box">
        <div class="wrap">
            <canvas id="canvas" width="180" height="180"></canvas>
        </div>
        <br />
        <label>Image File:</label><br/>
        <input type="file" id="imageLoader" name="imageLoader"/>
        <br />
        <br />
        <a href="#" clss="buttonLink" id="downloadLink">Download!</a>
    </div>
    <script>


        $(document).ready(function() {
            //upload images.
            var imageLoader = document.getElementById('imageLoader');
            imageLoader.addEventListener('change', handleImage, false);
            //draw image.
            var canvas = document.getElementById('canvas');
            var context = canvas.getContext('2d');
            //download link.
            var downloadLink = document.getElementById('downloadLink');

            //upload image.
            function handleImage(e){
                var reader = new FileReader();
                reader.onload = function(event){


            var img = new Image();
            img.setAttribute('crossOrigin', 'anonymous');

                    var width = 180;
                    var height = 180;
                    img.onload = function(){

                    context.drawImage(img,0,0, width, height);
                    var imageObj = new Image();
                        imageObj.setAttribute('crossOrigin', 'anonymous');
                    imageObj.onload = function() {
                      context.drawImage(imageObj, 69, 50);
                    };
                        imageObj.src = icon.png';
                    }
                    img.src = event.target.result;
                }
                reader.readAsDataURL(e.target.files[0]);     
            };              
            //download link.
            downloadLink.onclick = function () {
                downloadLink.href = canvas.toDataURL();
                downloadLink.download = 'facebook';
            };
        });
    </script> 

.盒子{
宽度:300px;
高度:300px;
边框:1px纯蓝色;
填充:1em;
}
.包裹{
宽度:180px;
高度:180像素;
保证金:0自动;
背景:红色;
位置:相对位置;
}

图像文件:


$(文档).ready(函数(){ //上传图片。 var imageLoader=document.getElementById('imageLoader'); imageLoader.addEventListener('change',handleImage,false); //画图像。 var canvas=document.getElementById('canvas'); var context=canvas.getContext('2d'); //下载链接。 var downloadLink=document.getElementById('downloadLink'); //上传图片。 函数handleImage(e){ var reader=new FileReader(); reader.onload=函数(事件){ var img=新图像(); setAttribute('crossOrigin','anonymous'); var宽度=180; var高度=180; img.onload=函数(){ 绘图图像(img,0,0,宽度,高度); var imageObj=新图像(); setAttribute('crossOrigin','anonymous'); imageObj.onload=函数(){ 背景。drawImage(imageObj,69,50); }; imageObj.src=icon.png'; } img.src=event.target.result; } reader.readAsDataURL(e.target.files[0]); }; //下载链接。 downloadLink.onclick=函数(){ downloadLink.href=canvas.toDataURL(); downloadLink.download='facebook'; }; });
您需要读取EXIF数据并采取相应措施。 读取数据的示例库:

也已经回答了问题

同样来自另一个来源,这是您应该如何处理画布上的exif方向:

switch(orientation){
    case 2:
        // horizontal flip
        ctx.translate(canvas.width, 0);
        ctx.scale(-1, 1);
        break;
    case 3:
        // 180° rotate left
        ctx.translate(canvas.width, canvas.height);
        ctx.rotate(Math.PI);
        break;
    case 4:
        // vertical flip
        ctx.translate(0, canvas.height);
        ctx.scale(1, -1);
        break;
    case 5:
        // vertical flip + 90 rotate right
        ctx.rotate(0.5 * Math.PI);
        ctx.scale(1, -1);
        break;
    case 6:
        // 90° rotate right
        ctx.rotate(0.5 * Math.PI);
        ctx.translate(0, -canvas.height);
        break;
    case 7:
        // horizontal flip + 90 rotate right
        ctx.rotate(0.5 * Math.PI);
        ctx.translate(canvas.width, -canvas.height);
        ctx.scale(-1, 1);
        break;
    case 8:
        // 90° rotate left
        ctx.rotate(-0.5 * Math.PI);
        ctx.translate(-canvas.width, 0);
        break;
}