【问题标题】:How to deal with iOS taking upside down picture如何处理iOS拍照倒置
【发布时间】:2014-08-31 19:35:06
【问题描述】:

我在网站上使用了一个输入字段,以便用户可以自己拍照。

在 iPad、iPhone 上,生成的图片是上下颠倒的。如何轻松检测用户是否使用了相机,以便通过 Javascript 旋转图像?

之后我在 Javascript Canvas 中使用了图片。

我得到了这个输入字段:

<div class="input-field">
    <label>Choose image or take a picture :</label>
    >input type="file" id="imageLoader" name="imageLoader" accept="image/*"/>
</div>

在 JS 中:

var imageLoader;
imageLoader = document.getElementById('imageLoader');
imageLoader.addEventListener('change', _handleImage, false);

function _handleImage( e ){

    var reader = new FileReader();

    reader.onload = function(event){

        picture.onload = function(){
           // The image here is upside down :( I want to turn it to 180 degrees here
           do_stuff( );

        };

        picture.src = event.target.result;

    };
    reader.readAsDataURL(e.target.files[0]);
}

【问题讨论】:

标签: javascript ios iphone ipad canvas


【解决方案1】:

我设法使用这些库来做到这一点(我脑子里没有链接,但搜索谷歌,那些特定版本就可以了):

  1. Javascript EXIF 阅读器 0.1.4
  2. 二进制 Ajax 0.1.10

这是完整的代码:

HTML:

<div class="input-field">
    <label>Choose image or take a picture :</label>
     <input type="file" id="imageLoader" name="imageLoader" accept="image/*"/>
</div>

JS:

var imageLoader, _isUpsideDown = false;
imageLoader = document.getElementById('imageLoader');
imageLoader.addEventListener('change', _handleImage, false);

function _handleImage( e ){

    var reader = new FileReader();

    reader.onload = function(event){

        picture.onload = function(){
            // Launch Canvas, display image, etc...
            doStuff();

        };

        picture.src = event.target.result;

    };
    reader.readAsDataURL(e.target.files[0]);

    // Second file reader which will read the file as binaryString to detect the orientation.
    var file = this.files[0];  // file
    filereaderString   = new FileReader; // to read file contents

    filereaderString.onloadend = function() {

        // get EXIF data
        var exif = EXIF.readFromBinaryFile(new BinaryFile(this.result));

        // the 3 value means that the image is upside down. 1 is when the image is correct size.
        if( exif.Orientation === 3 ){
            _isUpsideDown = true;
        }

    };

    filereaderString.readAsBinaryString(file); // read the file
}

【讨论】:

    【解决方案2】:

    来自哪个相机?前面还是后面?因为它们也不同,取决于你想从他们那里得到什么。我考虑过后置摄像头。

    我创建了一些按钮,代表您必须针对每种情况执行的操作:

    var angle = 0;
    $('#portraitButton').on('click', function() {
        angle = 90;
        $("#picture").rotate(angle);
    });
    
    $('#landscapeLeft').on('click', function() {
        angle = 180;
        $("#picture").rotate(angle);
    });
    
    $('#landscapeRight').on('click', function() {
        angle = 180;
        $("#picture").rotate(angle);
    });
    
    $('#upsideDown').on('click', function() {
        angle = -90;
        $("#picture").rotate(angle);
    });
    

    演示在这里:http://jsfiddle.net/s6zSn/382/

    希望能帮到你:)

    【讨论】:

    • 谢谢,但它是用 javascript 编写的,因为它是一个网站。
    • 啊,我明白了。可以在 jQuery 中吗?
    • 可以,我在项目中使用jQuery。
    • 这只是在前端旋转图像。但是当我将它保存到服务器时,图像仍然是颠倒的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 2013-10-02
    相关资源
    最近更新 更多