gpt4 book ai didi

javascript - 解析调整图像大小无法正确保存

转载 作者:行者123 更新时间:2023-11-28 15:31:45 25 4
gpt4 key购买 nike

我正在尝试按照 Cloud Modules Guide 调整 Parse Cloud 代码中的图像大小。

基本思想如下:当对用户调用afterSave时,检查小个人资料图片是否为空并且标准个人资料图片不为空。如果为 true,则从 Parse 获取标准个人资料图片,读入缓冲区,创建文件,保存文件,然后将文件添加到用户并保存。不幸的是,该文件似乎无法正确保存。

这是云afterSave功能:

    Parse.Cloud.afterSave(Parse.User, function(request) {

...

Parse.Cloud.httpRequest({
url: request.object.get("profilePicture").url(),
success: function(response) {
// The file contents are in response.buffer.

var image = new Image();
console.log("Buffer: " + response.buffer );
console.log("Length " + response.buffer.length);
image.setData(response.buffer);
var imgData = image.data();


// Save the image into a new file.
var base64 = imgData.toString("base64");
var scaled = new Parse.File("thumbnail.png", { base64: base64 });
scaled.save().then(function() {
request.object.set("profilePictureSmall", scaled);
request.object.save();
}, function(error) {
console.log( "The file either could not be read, or could not be saved to Parse.");
});
}
});
...
});

用户对象似乎保存得很好,但保存的图像文件是损坏的图像。

奇怪的是 console.log("Length "+ response.buffer.length); 将正确的大小输出到控制台。

console.log("Buffer: "+ response.buffer ); 给出输出:�PNG

知道这里发生了什么吗?

最佳答案

问题是 setData() 是一个异步调用,您需要等待它完成才能执行下一步。

http://parse.com/docs/js/symbols/Image.html#setData

这是一个片段:

Parse.Cloud.httpRequest({
url: request.object.get("profilePicture").url()
}).then(function(response) {
var image = new Image();
return image.setData(response.buffer);
}).then(function(image) {
// make it fit in 100x100
var width = 100, height = 100;
if (image.width() > image.height()) {
// work out scaled height
height = image.height() * (100/image.width());
} else {
// work out scaled width
width = image.width() * (100/image.height());
}
console.log("..scale to " + width + "x" + height);
return image.scale({
width: width,
height: height
});
}).then(function(scaledImage) {
// get the image data in a Buffer
return scaledImage.data();
}).then(function(buffer) {
// save the image to a new file
console.log("..saving file");
var base64 = buffer.toString("base64");
var name = "Thumbnail.png";
var thumbnail = new Parse.File(name, { base64: base64 });
return thumbnail.save();
}).then(function(thumbnail) {
// attach the image file to the original object
console.log("..attaching file");
request.object.set("profilePictureSmall", thumbnail);
return request.object.save();
}) /* further chaining here for after-save */;

您基本上必须将您的 promise 链接在一起才能完成上一步。

关于javascript - 解析调整图像大小无法正确保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27051131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com