javascript - 上传前可以在 html 表单上调整图像(客户端)的大小吗?

标签 javascript jquery html forms upload

我有一个标准的 html 输入表单,其中包含一个用于上传文件(图像)的字段。

不幸的是,我无法编辑处理文件的后端 php,但我需要将图像调整到特定大小。

我在想,在实际提交到 PHP 表单之前,我可以通过 jquery 或其他客户端方法在表单上调整图像大小来实现这一技巧。

这可能吗?有谁知道好的方法吗?

谢谢!!!

最佳答案

您可以使用新的 FileReader 让用户从他们的本地文件系统中选择图像。

然后您可以使用 Canvas 根据需要调整图像的大小。

enter image description here

此代码让用户选择本地镜像文件。

图片会在客户端缩小一半。

<!doctype html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<title>Image preview example</title>
<script type="text/javascript">
oFReader = new FileReader(), rFilter = /^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-portable\-anymap|image\/x\-portable\-bitmap|image\/x\-portable\-graymap|image\/x\-portable\-pixmap|image\/x\-rgb|image\/x\-xbitmap|image\/x\-xpixmap|image\/x\-xwindowdump)$/i;

oFReader.onload = function (oFREvent) {

  var img=new Image();
  img.onload=function(){
      document.getElementById("originalImg").src=img.src;
      var canvas=document.createElement("canvas");
      var ctx=canvas.getContext("2d");
      canvas.width=img.width/2;
      canvas.height=img.height/2;
      ctx.drawImage(img,0,0,img.width,img.height,0,0,canvas.width,canvas.height);
      document.getElementById("uploadPreview").src = canvas.toDataURL();
  }
  img.src=oFREvent.target.result;
};

function loadImageFile() {
  if (document.getElementById("uploadImage").files.length === 0) { return; }
  var oFile = document.getElementById("uploadImage").files[0];
  if (!rFilter.test(oFile.type)) { alert("You must select a valid image file!"); return; }
  oFReader.readAsDataURL(oFile);
}
</script>
</head>

<body onload="loadImageFile();">
  <form name="uploadForm">
    <table>
      <tbody>
        <tr>
          <td><img id="originalImg"/></td>
          <td><img id="uploadPreview"/></td>
          <td><input id="uploadImage" type="file" name="myPhoto" onchange="loadImageFile();" /></td>
        </tr>
      </tbody>
    </table>
  </form>
</body>
</html>

现代浏览器支持 FileReader(但对于 IE,您需要 10+)。

关于javascript - 上传前可以在 html 表单上调整图像(客户端)的大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17583984/

相关文章:

php - 显示实时页面查看者数量

html - CSS:如何消除表格中特定行/列的边框

javascript - 获取高度为 :100%; using jquery 的图像的确切宽度

javascript - 选择2 : delete the element selected by pressing delete key

javascript - 如何修改数组的数组,具体取决于其中的元素是否与另一个数组的数组中的元素匹配?

javascript - jQuery 动画数字计数器从零到值 - 当值达到数十万时计数器显示错误值

php - 我在哪里将 sql 语句存储在 blueimp/jQuery-File-Upload 的数据库中?

javascript - WebUI Popover 无法使用 html 元素设置标题

asp.net - 如何使用 CSS 指定的 DOCTYPE 修复 100% 高度表格中的表格行高?

javascript - 侧边栏导航 - 单击侧边导航外部关闭侧边栏