如何应对iOS拍照的问题

时间:2014-07-10 12:15:49

标签: javascript ios iphone ipad canvas

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

在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]);
}

2 个答案:

答案 0 :(得分:3)

我设法使用这些库(我没有想到的链接,但搜索谷歌,这些特定版本才有效):

  1. Javascript EXIF Reader 0.1.4
  2. Binary Ajax 0.1.10
  3. 下面是完整的代码:

    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
    }
    

答案 1 :(得分: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/

我希望我能提供帮助:)。