【问题标题】:Image resize before upload without preview javascript上传前调整图像大小而不预览javascript
【发布时间】:2016-02-04 22:10:00
【问题描述】:

我想避免上传大/重的图像文件。

我更喜欢 HTML5 FileAPI 库来完成这项工作。

添加了所有其他功能(上传、重新排序等),所以我只需要图像调整大小功能。

案例:

页面上有多个文件的输入。

在输入更改事件时(添加文件时),调整输入的图像/文件的大小并将它们附加到 FormData(),然后通过 ajax 将 FormData() 发送到 PHP 脚本。

示例:

$('input').on('change',function(){
   var formData = resizeImages(this.files[0]);   
   uploadResizedImages(formData);
});

function resizeImages(files){
   formData = new FormData();

   //For each image, resize it and append to formData
   //resize file part missing....
   formData.append('files[]',this);//Appending to formData (this = currently iterated file)

   return formData;//Return the formData with resized images
}

有人吗?

谢谢

【问题讨论】:

    标签: javascript ajax html html5-canvas image-resizing


    【解决方案1】:

    根据我的经验,您无法在客户端操作图像,然后通过表单中的文件输入完整地上传操作后的图像。

    我在过去所做的你正在尝试做的事情涉及几个步骤。

    1. 使用文件输入选择图像
    2. 将文件作为 dataURL 读取
    3. 根据需要使用画布操作图像
    4. 将新图像导出为 dataUrl
    5. 使用ajax将图片作为dataURL上传到服务器
    6. 使用服务器端函数将 dataUrl 转换为图像并存储

    https://jsfiddle.net/0hmhumL1/

    function resizeInCanvas(img){
      /////////  3-3 manipulate image
        var perferedWidth = 2700;
      var ratio = perferedWidth / img.width;
      var canvas = $("<canvas>")[0];
      canvas.width = img.width * ratio;
      canvas.height = img.height * ratio;
      var ctx = canvas.getContext("2d");
      ctx.drawImage(img, 0,0,canvas.width, canvas.height);
      //////////4. export as dataUrl
      return canvas.toDataURL();
    }
    

    作为 dataUrl 上传时,您会将处理后的图像的大小(所需带宽)增加约 20%,因此除非您大幅更改图像大小,否则您可能看不到所需的节省。

    【讨论】:

    • 我希望图像尺寸最大为 1920x1080。当我用相机拍摄照片时,分辨率为 6000x4000,大小从 8Mb 到 20Mb。通过调整它的大小,它将约为 2 Mb(希望如此)。另外,我想我可以添加 jpg 质量降低来获得更低的尺寸。顺便提一句。我会以 PHP 中的 $_FILES 还是 $_POST 的形式接收这些 dataURL?感谢您的回复。
    • 如何将 DataURL 还原为 Blob 对象,附加到 FormData 然后发送?
    • 根据您之前的问题。如果您将首选宽度更改为 1920,则解决方案将正确调整图像大小。我不是 php 程序员,所以我不知道答案,但我的猜测是 $_POST 因为它实际上不再是文件,而只是正在传输的数据
    • 我已经尝试过这个...但是文件大小最终在画布上要大得多...原来是 37kb,然后上传的版本是 387kb...什么给出?
    • 谢谢,它解决了我的需求! @Carine,对于小文件,有时会发生这种情况,但是如果您使用 Mb 文件,则确实会缩小。我为此创建了一个 Ember 组件,如果有人需要,请给我发送消息。
    猜你喜欢
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 2011-01-06
    相关资源
    最近更新 更多