Javascript:调整base64图像的大小并以非异步方式返回字符串
Javascript: resize base64 image and return string in non-async way
我用谷歌搜索了足够多的例子,找到了如何调整图像大小的解决方案:
function imageToDataUri(img, width, height) {
// create an off-screen canvas
var canvas = document.createElement('canvas'),ctx = canvas.getContext('2d');
// set its dimension to target size
canvas.width = width;
canvas.height = height;
// draw source image into the off-screen canvas:
ctx.drawImage(img, 0, 0, width, height);
// encode image to data-uri with base64 version of compressed image
return canvas.toDataURL();
}
function resizeImage() {
var newDataUri = imageToDataUri(this, 10, 10); // resize to 10x10
return newDataUri;
}
这是我的问题:
我有对象列表,其中每个项目都有 64 个图像字符串:group.mAvatarImgBase64Str
. 该字符串大于 10x10,我需要将其替换为新字符串。
到目前为止,我做到了:
if (group.mAvatarImgBase64Str !== 'none') {
var img = new Image();
img.onload = resizeImage;
img.src = group.mAvatarImgBase64Str;
// group.mAvatarImgBase64Str = ??
}
如果我resizeImage
方法中打印出新值 - 它正确调整了大小,但是:
如何将新字符串添加回group.mAvatarImgBase64Str
?
onload
任务是异步的,我需要类似的东西:
group.mAvatarImgBase64Str = resize(group.mAvatarImgBase64Str, 10, 10);
谢谢
你应该能够这样做:
if (group.mAvatarImgBase64Str !== 'none') {
(function(group) {
var img = new Image();
img.onload = function() {
group.mAvatarImgBase64Str = resizeImage.call(this);
}
img.src = group.mAvatarImgBase64Str;
})(group);
}
如果您使用 for 循环迭代对象数组,则需要额外的 IIFE。如果使用forEach
循环,则不需要它。
相关文章:
- 如何以异步方式打印q中的项目
- 我想以异步方式执行常规函数
- 在Nodejs中堆叠异步回调事件的最佳方式
- 节点.js:如何以编程方式确定异步
- 网页异步更新的方式有哪些
- 接收json异步响应的最有效方式
- 以编程方式将同步代码转换为异步代码
- Javascript:调整base64图像的大小并以非异步方式返回字符串
- 什么's是在Node.js中链接异步函数的正确方式
- Node.js:执行多个异步操作的最佳方式,然后执行其他操作
- 在NodeJ中执行异步卷曲的最佳方式
- 如果以异步方式加载绑定的资源,则函数中的$watch/$timeout包装会中断双向绑定
- 优雅的方式运行大量异步“;事物;当总数为'直到第一个“;事物;退货
- 以异步方式向前端web应用程序添加设置文件
- 如何以组的方式调用一个异步函数?
- 通过Promises异步加载外部js文件的最佳方式
- 异步加载下划线模板的最佳方式
- 以事件驱动的方式编写异步代码
- 以异步方式设置函数参数
- 画布绘制函数以异步方式运行