Javascript: функция изменения размера с HTML 5

0

Мне нужно создать функцию, которая получает файл из параметра, изменять его размер и возвращать файл для загрузки.

У меня уже есть код для получения файла (с помощью загрузки файла jQuery), затем я захватываю переменную файла и передаю этот метод с именем resizeImage, который я получил из этой ссылки, но я не мог понять, как вернуть файл, который я изменено (я новичок в javascript). поэтому я могу отправить его на амазонку S3. ЕСЛИ кто-то хочет увидеть код, вот он: http://pastebin.com/bgYLSFsR

вот эта функция, которую я придумал:

function resizeImage(f) {

    var file = f;

    var img = document.createElement("img");
    var reader = new FileReader();  
    reader.onload = function(e) {img.src = e.target.result}
    reader.readAsDataURL(file);

    var MAX_WIDTH = 100;
    var MAX_HEIGHT = 100;
    var width = img.width;
    var height = img.height;

    if (width > height) {
      if (width > MAX_WIDTH) {
        height *= MAX_WIDTH / width;
        width = MAX_WIDTH;
      }
    } else {
      if (height > MAX_HEIGHT) {
        width *= MAX_HEIGHT / height;
        height = MAX_HEIGHT;
      }
    }
    var canvas = document.createElement('canvas');
    canvas.width = width;
    canvas.height = height;
    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0, 100, 100);
}

любое предложение очень приветствуется, спасибо!

  • 1
    используйте метод canvas.toDataURL (), чтобы получить данные двоичного изображения холста в виде строкового виртуального файла base64. Затем вы можете использовать ajax для отправки данных привязки на S3 или загрузки их в виде изображения на локальный компьютер пользователя.
  • 0
    Вы не можете загрузить изображение, используя только ajax: вы можете отправить его на серверный контроллер или использовать для этого flash / java-апплет.
Теги:
image-uploading

1 ответ

0

Вы не можете сделать это с клиентской стороны, поскольку по соображениям безопасности - создание файлов запрещено браузером:

там нет способа, если это не текстовый файл, и в этом случае есть некоторые ограниченные,

клиентские решения, такие как: http://jsfiddle.net/VBJ9h/319/, используя:

<a href="data:application/octet-stream,field1%2Cfield2%0Afoo%2Cbar%0Agoo%2Cgai%0A">CSV</a>

взломать лимит; Он отлично работает с текстовыми файлами, но IE будет иметь проблему, так как он ограничивает длину href, и это может быть непригоден для вашего файла.

Другой способ - использовать flash, IE что-то вроде Downloadify и передать ему двоичное представление.

Ваш третий вариант - передать результат серверному контроллеру, который будет создавать и возвращать изображение для вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню