Как исправить ориентацию (загрузить изображение) перед сохранением в папке (Javascript)?

Я пробую эту ссылку: https://github.com/blueimp/JavaScript-Load-Image

Я пробую вот так: https://jsfiddle.net/oscar11/gazo3jc8/

  • Как я могу правильно использовать объект PDO для параметризованного запроса SELECT
  • Создание одного массива из другого массива в php
  • Как удалить повторяющиеся значения из многомерного массива в PHP
  • Уведомление Apple Push с отправкой пользовательских данных
  • Изменить версию openssl в MAMP
  • Как безопасно создавать переменные PHP с извлечением
  • Мой код javascript:

    $(function () { var result = $('#result') var currentFile function updateResults (img, data) { var content if (!(img.src || img instanceof HTMLCanvasElement)) { content = $('<span>Loading image file failed</span>') } else { content = $('<a target="_blank">').append(img) .attr('download', currentFile.name) .attr('href', img.src || img.toDataURL()) var form = new FormData(); form.append('file', currentFile); $.ajax({ url:'response_upload.php', type:'POST', data:form, processData: false, contentType: false, success: function (response) { console.log(response); }, error: function () { console.log(error) }, }); } result.children().replaceWith(content) } function displayImage (file, options) { currentFile = file if (!loadImage( file, updateResults, options )) { result.children().replaceWith( $('<span>' + 'Your browser does not support the URL or FileReader API.' + '</span>') ) } } function dropChangeHandler (e) { e.preventDefault() e = e.originalEvent var target = e.dataTransfer || e.target var file = target && target.files && target.files[0] var options = { maxWidth: result.width(), canvas: true, pixelRatio: window.devicePixelRatio, downsamplingRatio: 0.5, orientation: true } if (!file) { return } displayImage(file, options) } // Hide URL/FileReader API requirement message in capable browsers: if (window.createObjectURL || window.URL || window.webkitURL || window.FileReader) { result.children().hide() } $('#file-input').on('change', dropChangeHandler) }) 

    Если я загрузил изображение, изображение, сохраненное в папке, по-прежнему не использует изображение, установленное в его ориентации. Я хочу, чтобы при загрузке изображения изображение, хранящееся в папке, было изображением, которое было настроено на его ориентацию

    Кажется, что currentFile отправленный через ajax, является неизмененным currentfFile. Как получить измененный currentFile ?

    2 Solutions collect form web for “Как исправить ориентацию (загрузить изображение) перед сохранением в папке (Javascript)?”

    После некоторого небольшого исследования я нашел решение благодаря этому великолепному плагину https://github.com/blueimp/JavaScript-Canvas-to-Blob . ( canvas-to-blob.js )

    Этот плагин преобразует ваш холст в сервер Blob напрямую, увидит его, как если бы он был фактическим файлом и получит новый (измененный) файл в вашем массиве $ _FILES . Все, что вам нужно, это вызвать toBlob на объекте canvas ( img ). После этого вы получите свой blob, который вы затем можете отправить в FormData. Ниже приведена обновленная updateResults()

     function updateResults (img, data) { var content if (!(img.src || img instanceof HTMLCanvasElement)) { content = $('<span>Loading image file failed</span>') } else { content = $('<a target="_blank">').append(img) .attr('download', currentFile.name) .attr('href', img.src || img.toDataURL()) img.toBlob( function (blob) { var form = new FormData(); form.append('file', blob, currentFile.name); $.ajax({ url:'response_upload.php', type:'POST', data:form, processData: false, contentType: false, success: function (response) { console.log(response); }, error: function () { console.log(error) }, }); },'image/jpeg' ); result.children().replaceWith(content); } } 

    Вы хотите изменить некоторые вещи об изображении (размеры, roataion и т. Д.) И загрузить его на сервер, но проблема заключается в том, что плагин ImageLoad предоставит модифицированное изображение в качестве canvas он не будет изменять исходный файл, выбранный в <input type="file" id="file-input"> . Поскольку вы отправляете объект ввода файла в form.append('file', currentFile); ваш измененный файл не будет отправлен, а только оригинал

    Как исправить?

    Это особенность, которую вы (или плагин) не можете изменить что-либо на <input type="file" id="file-input"> из-за ограничений браузера, вы не можете отправить canvas непосредственно на сервер, так что единственный способ (используется и отлично работает ) заключается в том, чтобы отправить URI данных изображения в виде обычного текста, а затем декодировать его на сервере, записать его в файл. Вы также можете отправить исходное имя файла, поскольку URI данных является чистым контентом и не выполняется имя файла

    + Изменить

      form.append('file', currentFile); 

    к

      form.append('file', img.toDataURL() ); // data:image/png;base64,iVBO ... form.append('file_name', currentFile.name ); // filename 

    PHP

      $img_data=substr( $_POST['file'] , strpos( $_POST['file'] , "," )+1); //removes preamble ( like data:image/png;base64,) $img_name=$_POST['file_name']; $decodedData=base64_decode($img_data); $fp = fopen( $img_name , 'wb' ); fwrite($fp, $decodedData); fclose($fp ); 

    Удачи!

    PHP is the Best Programming Language in the world.