我无法将从base64编码的图像从python子进程发送到节点。
我想:
python文件很简单:
import sys
from PIL import Image
import base64
import os
### Get image
inputFilePath = sys.argv[1]
img = Image.open(inputFilePath)
### Operate on image
img = img.rotate(180)
### Save image
img.save('temp_image.jpg')
### Convert image to base64
with open('temp_image.jpg','rb') as imageFile:
encodedString = base64.b64encode(imageFile.read())
### Remove Temp file
os.remove('temp_image.jpg')
### send the base64 string to parent process
print(encodedString)
这应该将编码图像发送到父进程。
在节点中,我试图将编码的字符串写入图像文件。
var spawn = child.spawn(cmd, args);
var chunk = ''
spawn.stdout.on('data', function(data){
chunk += data.toString();
});
spawn.stdout.on('close', function(data){
fs.writeFile(destination, chunk, 'base64', function(err){
console.log("err: " + err)
});
});
console.log("Done");
});
我的问题:文件太小/已损坏。我不太确定如何解决它 - 任何帮助都会受到赞赏!
答案 0 :(得分:0)
为什么要chunk + = data.toString()?
您收到的数据已经是字符串,根据您的python代码,您将整个图像打印出来,因此您不需要块+ =任何内容。
只需将stdout写入nodejs端的文件即可。
此外,如果spawn无效,您可以尝试使用childProcess.exec。确保查看NodeJS api文档。
//or var or const
let childProcess = require('child_process');
childProcess.exec('python interface.py', function(error, stdout, stderr) {
if (error !== null) {
console.log(`exec error: ${error}`);
//and handle the child process error maybe?
}
try {
do.something.with.your.stdout() // replace this line with real code
}
catch (e) {
// handle your error
}
});