【问题标题】:canvas image turns the image 90 degrees, when loading through phone通过手机加载时,画布图像将图像旋转 90 度
【发布时间】:2016-05-20 03:37:41
【问题描述】:

我正在尝试制作一个小画布功能,它可以让您上传图片并在其上添加叠加层。我让它上传,在顶部创建图像并下载,但是当我尝试通过手机上传图像时。它将图像旋转 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> 

【问题讨论】:

    标签: javascript html image canvas html5-canvas


    【解决方案1】:

    您需要读取 EXIF 数据并采取相应措施。 读取数据的示例库: https://github.com/exif-js/exif-js

    也已经回答了问题 JS Client-Side Exif Orientation: Rotate and Mirror JPEG Images

    同样来自另一个来源,这就是您应该如何处理画布上的 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-08-29
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      相关资源
      最近更新 更多