2013-09-28 134 views
4

我看到很多帖子在上传前查看图像。 一个岗位有一个非常应该是很容易的方法使用的FileReader来实现:上传之前使用FileReader预览图像,旋转图像

function readURL(input) { 
if (input.files && input.files[0]) { 
    var reader = new FileReader(); 

    reader.onload = function (e) { 
     $('#preview_image').attr('src', e.target.result); 
    } 

    reader.readAsDataURL(input.files[0]); 
} 
} 

$("#image_input").change(function(){ 
    readURL(this); 
}); 

但问题是,加载图像旋转!那么是否有缺失的财产 ,我错过了?或者FileReader可能不够成熟,无法理解图像的布局 。不知道!

也许我应该使用不同的方法! 关于这个问题的任何想法将不胜感激。

感谢

+0

建议你将不得不解析EXIF数据中的图像头,检查方向标签,并相应地旋转。 –

+0

我遇到了同样的问题。我的预览实现在Vue.js中,工作正常。我注意到,如果图像尺寸较小,它会保持方向,但如果图像较大,像3-4MB一样旋转,则上方的图像也会旋转。不知道为什么会发生。 – Laraveldeep

回答

4

我知道它晚来回答这个问题,但这里是一个答案

HTML代码

<form method="POST" enctype="multipart/form-data"> 
    <input type="file" id="file"> 
    <div id="preview"></div> 
    <br> 
    <a href="#" id="counter"><- counter</a> 
     <select id="degree"> 
      <option>90</option> 
      <option>45</option> 
     </select> 
    <a href="#" id="clockwise">clockwise -></a> 
    <hr> 
    <button type="submit">save image</button> 
</form> 

JavaScript代码

$('a').click(function(){ 
    var a = $('img').getRotateAngle(); 
    var d = Math.abs($('#degree').val()); 

    if($(this).attr('id') == 'counter'){ 
     //d = -Math.abs(+a - +d); 
     d = a - d; 
    } 
    else{d = +a + +d;} 

    $('img').rotate({animateTo:d}); 
}); 

/* image preview */ 
$('#file').change(function(){ 
    var oFReader = new FileReader(); 
    oFReader.readAsDataURL(this.files[0]); 
    console.log(this.files[0]); 
    oFReader.onload = function (oFREvent) { 
     $('#preview').html('<img src="'+oFREvent.target.result+'">'); 
    }; 
}); 

CSS

#preview img { 
    max-height: 300px; 
    max-width: 300px; 
} 

http://jsfiddle.net/AxRJh/

这不是我的代码,同样的问题搜索时发现它给出的小提琴。