在将图像上传到 firebase 之前调整图像大小

Resize an image before uploading it to firebase

Firebase 存储看起来非常酷且易于使用,但我想知道是否有一种方法可以在将图像上传到 Firebase 存储之前调整其大小,例如,运行 在服务器中使用 ImageMagick 的过程和然后 运行 使用 Firebase SDK 的上传过程,但我注意到 Firebase SDK 服务器没有存储功能。

您还可以使用 Firebase Storage + Google Cloud Functions 上传图片、调整图片大小(使用 ImageMagick 或类似工具),然后将其写回 Firebase Storage。

我有一个将它们一起使用的示例 here (though I trigger the Cloud Vision API,而不是图像缩放器)。

附注:Firebase Storage 没有 Node.js 客户端,我们建议使用 GCloud-Node 库。

使用 JavaScript 客户端处理

调整大小

我们正在使用 JavaScript 调整大小,它使用客户端设备处理能力来调整图像大小,效果很好,为我们节省了 space 和金钱,节省网络不必要的带宽,并在大多数移动情况下为客户节省大量时间和金钱。

我们使用的原脚本是came from here,使用方法很简单:

<input type="file" id="select">
<img id="preview">
<script>
document.getElementById('select').onchange = function(evt) {
    ImageTools.resize(this.files[0], {
        width: 320, // maximum width
        height: 240 // maximum height
    }, function(blob, didItResize) {
        // didItResize will be true if it managed to resize it, otherwise false (and will return the original file as 'blob')
        document.getElementById('preview').src = window.URL.createObjectURL(blob);
        // you can also now upload this blob using an XHR.
    });
};
</script>

我相信那个人 (dcollien) 值得很多功劳,所以我建议您对他的回答投赞成票。

您还可以使用 Firebase 存储 + 官方 Firebase Resize Image 扩展: https://firebase.google.com/products/extensions/firebase-storage-resize-images。这里的缺点是“要安装扩展,您的项目必须在 Blaze(现收现付)计划中”。 Bc 基本上它会为您启动一个 Firebase Function App,每次您将文件上传到您指定的路径时它都会被触发。您可以配置所需的大小和格式,或者是否要保留原始文件的副本。幸好你不需要担心底层实现。