предварительный просмотр изображения перед загрузкой с помощью 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 недостаточно развит, чтобы понять макет изображения. без понятия!

может быть, я должен работать с другим методом!? любые идеи по этому вопросу будут весьма признательны.

Благодарность


person ufk    schedule 28.09.2013    source источник
comment
Вам нужно будет проанализировать данные exif в заголовке изображения, проверить тег Orientation и соответствующим образом повернуть.   -  person Ray Nicholus    schedule 29.09.2013
comment
Я столкнулся с той же проблемой. Моя предварительная реализация находится на Vue.js и работает нормально. Я заметил, что если изображение меньше, оно сохраняет ориентацию, но если изображение больше, например 3-4 МБ, оно вращается, поэтому загруженное изображение также поворачивается. Не уверен, почему это происходит.   -  person Laraveldeep    schedule 10.11.2017


Ответы (2)


Я знаю, что уже поздно отвечать на этот вопрос, но вот ответ

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/

Это не мой код, нашел его на данной скрипке при поиске той же проблемы.

person Ravi    schedule 30.01.2014

Это связано с метаатрибутом Orientation в информации EXIF ​​​​изображения, как это предлагается в этом посте.

изображение автоматически поворачивается во время чтение URL-адреса из загруженного файла (когда это большое изображение)?

Здесь предлагаются значения ориентации

Доступ к данным вращения JPEG EXIF ​​в JavaScript на клиенте сторона

person Laraveldeep    schedule 10.11.2017