如何应对iOS拍照的问题

arl*_*rlg 5 javascript iphone canvas ipad ios

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

在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>
Run Code Online (Sandbox Code Playgroud)

在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]);
}
Run Code Online (Sandbox Code Playgroud)

arl*_*rlg 3

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

  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>
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)