上传前调整图像大小

IT技术 javascript image-processing
2021-03-15 10:16:05

我需要为用户提供一种以 jpeg 格式将照片上传到他们网站的方法。但是,这些照片的原始尺寸非常大,我想让用户轻松地在上传选项之前调整大小。似乎我唯一的选择是客户端应用程序在通过 Web 服务上传照片之前调整照片大小,或者在上传操作上调整图像大小的客户端 JavaScript 钩子。第二个选项是非常暂定的,因为我没有 JavaScript 图像大小调整库,而且很难让 JavaScript 运行我当前的调整大小工具 ImageMagick。

我相信这种情况并不少见,我们将不胜感激提供一些建议或指向执行此操作的站点的指示。

6个回答

在 2011 年,我们可以知道使用 File API 和 canvas 来实现。这目前仅适用于 Firefox 和 chrome。这是一个例子:

var file = YOUR_FILE,
    fileType = file.type,
    reader = new FileReader();

reader.onloadend = function() {
  var image = new Image();
      image.src = reader.result;

  image.onload = function() {
    var maxWidth = 960,
        maxHeight = 960,
        imageWidth = image.width,
        imageHeight = image.height;

    if (imageWidth > imageHeight) {
      if (imageWidth > maxWidth) {
        imageHeight *= maxWidth / imageWidth;
        imageWidth = maxWidth;
      }
    }
    else {
      if (imageHeight > maxHeight) {
        imageWidth *= maxHeight / imageHeight;
        imageHeight = maxHeight;
      }
    }

    var canvas = document.createElement('canvas');
    canvas.width = imageWidth;
    canvas.height = imageHeight;

    var ctx = canvas.getContext("2d");
    ctx.drawImage(this, 0, 0, imageWidth, imageHeight);

    // The resized file ready for upload
    var finalFile = canvas.toDataURL(fileType);
  }
}

reader.readAsDataURL(file);
我知道这有点旧,但是从底部算起的第 5 行应该是var file = canvas.toDataURL(fileType);否则,finalFile只是有点设置和遗忘。
2021-04-17 10:16:05
我写了一篇关于它的博客文章(用法语)。这是谷歌翻译的:translate.google.fr/...
2021-04-23 10:16:05
好吧,一旦你得到了finalFile你应该上传它(通过传递finalFile给上传函数)。这部分没有显示在那里,因为问题是关于如何调整图像大小。
2021-05-01 10:16:05
您将如何发出正确的 ajax 发布请求,文件的显示方式与常规格式相同?我想让更改对我的应用程序的其余部分透明。
2021-05-02 10:16:05

有多种技术能力的Plupload工具,它声明它可以在上传前调整大小,但我还没有尝试过。我还在关于二进制图像处理 javascript libs 的问题中找到了合适的答案

您有多种选择:

  1. Java
  2. ActiveX(仅在 Windows 上)
  3. silverlight
  4. flash
  5. 柔性
  6. Google Gears(最新版本能够从桌面调整大小和拖放)

我进行了大量研究,以寻找与您所描述的类似的解决方案,并且有很多解决方案在质量和灵活性上差异很大。

我的建议是找到一个解决方案,它可以满足您 80% 的需求,并对其进行定制以满足您的需求。

是的,我对 google gears 的建议是在删除之前提出的(请注意我的回答日期)。
2021-04-27 10:16:05
截至 2011 年,它可以在本地完成。请参阅下面的答案:stackoverflow.com/a/8397789/1689770
2021-05-12 10:16:05
@digitalsanctum 5 年后有什么变化吗?
2021-05-14 10:16:05

我认为你需要 Java 或 ActiveX。例如薄图像上传

jao 和 russau 说的是真的。原因是出于安全原因,JavaScript 无法访问本地文件系统。如果 JavaScript 可以“看到”您的图像文件,那么它就可以看到任何文件,这很危险。

您需要一个应用程序级控件才能做到这一点,这意味着 Flash、Java 或 Active-X。