【发布时间】:2016-08-09 23:25:06
【问题描述】:
我想对生成的 Blob 进行检查,这需要我将自己的变量传递给回调。但是,toBlob() only passes the Blob。如何将我自己的变量传递给回调?或者,是否有更好的方法来完成此操作,而不涉及将参数传递给回调?
在尝试.bind 之后,我无法让它工作:
function handleCanvas(canvas, inputImage, file, quality, resolutionMultiplier) {
console.log(quality);
canvas.toBlob(processImage.bind(null, inputImage, file, quality, resolutionMultiplier), "image/jpeg", Math.max(quality, 1) / 100)
}
function processImage(newBlob, inputImage, file, quality, resolutionMultiplier) {
console.log(quality);
}
打印出来:
72
0.5
但它们都应该是 72。由于 resolutionMultiplier 是 0.5,所有参数似乎都向左移动了 1。我想从 toBlob 得到的 blob 根本不会传递到 processImage。
最终编辑:找到了解决方案,比我想象的要简单得多:
function handleCanvas(canvas, inputImage, file, quality, resolutionMultiplier) {
canvas.toBlob(function (newBlob) {
processImage(newBlob, inputImage, file, quality, resolutionMultiplier);
}, "image/jpeg", Math.max(quality, 1) / 100)
}
【问题讨论】:
-
您如何使用
toBlob()?另一个变量是什么? -
我想这取决于?您是否希望它只是一个 polyfill,从第一个条件看起来就是这样,如果是这样,它不应该与您正在填充的本机方法一致吗?如果您想检查某些内容,只需在回调中执行即可?
-
@MattWay 另一个变量是原始 jpeg 的文件大小。我用它来比较 Blob 是否更小。
-
@adeneo 必须和native方法一致。如果没有,那么这将简单得多。如果我没有传入像 uuid 这样的参考值,我怎么知道在回调中检查哪个变量?
-
请添加一些代码来展示您如何尝试使用 toBlob,包括您的文件大小变量。或者您希望它如何工作。
标签: javascript parameter-passing