我正致力于在Python上处理基于JavaScript的赛车游戏框架。我在Python上使用Tornado Web Server。该游戏的分辨率为480x360。我在每个帧中从画布获取图像,然后在发送Web服务器之前重新缩放它。
但是在Python中,我无法解码图像。在这里,我的代码是
在JavaScript中:
function encode() {
var imageData = ctx.getImageData(0, 0, 360, 480);
var downsized = "";
for (var i = 0; i < imageData.data.length; i++) {
var d = imageData.data[i];
downsized += String.fromCharCode(d);
}
return downsized;
}
function processFrame(foobaz) {
downsizeImage.src = canvas.toDataURL()
downsizeCtx.drawImage(downsizeImage, 0, 0, 84, 84)
var imageData = downsizeCtx.getImageData(0, 0, 84, 84);
var counter = 0;
var downsized = ""
for (var i = 0; i < imageData.data.length; i++) {
var d = imageData.data[i];
if (i % 4 == 3){
continue;
}
else{
downsized += String.fromCharCode(Math.round(d));
}
}
return btoa(downsized);
}
然后,我将重新调整的图像发送到Python
$.ajax({
type: 'POST',
url: '/frame?telemetry=' + JSON.stringify({
all_data: [all_data],
terminal: true,
was_start: WAS_START,
action: [keyLeft, keyRight, keyFaster, keySlower]
}),
data: processFrame(),
contentType: "application/json"
}).done(function(data) {
location.reload();
});
在Python中:
class FrameHandler(tornado.web.RequestHandler):
def post(self):
global speed_data, start, position_data
fulldata = self.request.body
ar = np.fromstring(base64.decodestring(self.request.body), dtype=np.uint8)
img = ar.reshape(84, 84, 3)
在调试模式下,fulldata变量的值类似于&#34; AAAAAAAAAAAAAAAAAA ...&#34;和解码数组&#34; ar&#34;只有0个值。
我在哪里错过了?
答案 0 :(得分:0)
我在代码中做了一些更改。在这里,我不再缩小图像尺寸了。这解决了这个问题。这是解决方案。
var imageData = ctx.getImageData(85, 10, 300, 300);
var downsized = "";
for (var i = 0; i < imageData.data.length; i++) {
var d = imageData.data[i];
if (i % 4 == 3){
continue;
}
else{
downsized += String.fromCharCode(Math.round(d));
}
}
return btoa(downsized);
}