实时显示网页(不是本地主机)上的图片(位于计算机上)

时间:2018-04-03 07:56:55

标签: javascript python html raspberry-pi pubnub

所以,我被困在我的IoT项目中,我必须在我的网页上实时显示用我的picam拍摄的照片(托管在000webhost上)。

以下是我的尝试: 在我的raspberrry pi我有一个python代码将图像转换为Base64(使用pubnub发布)和使用Pubnub javascript sdk收集base64字符串并使用它来解码并显示图像。 问题是: Pubnub一次只能发送近35kb的数据

有没有办法可以在后端用我的picam拍照并通过显示当时拍摄的照片来更新我的网页。

(我正在使用pubnub从我的网页发送消息(触发器)到我的覆盆子pi上的python脚本来拍照)

2 个答案:

答案 0 :(得分:1)

ℹ️快速提示:PubNub接受发布

上的GZIP内容
  

这不是一个直接的答案。这只是一个很好的提示!

您可以在gzip POST your publish calls时发布更大的图片尺寸。您可以轻松地以多种语言发布gzip压缩数据。这是bash中的一个简单示例。 nodejs下面还有另一个。

#!/bin/bash

## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
## PubNub POST GZIP Example
## -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
echo '{"hello":["world",123,null]}' | gzip -c9 | \
curl \
    -H "Content-Encoding: gzip" \
    --data-binary @- \
    'http://pubsub.pubnub.com/publish/demo/demo/0/my_channel/0'

echo

使用NodeJS的POST GZIP数据

您也可以使用以下示例在Node.JS中执行此操作。

var http = require("http");
var zlib = require("zlib");

exports.publish = function(msg) {
    var req = http.request({
        "host" : "pubsub.pubnub.com",
        "method" : "POST",
        "path" : "/publish/demo/demo/0/my_channel/0",
        "headers" : {
            "Content-Encoding" : "gzip",
            "Content-Type" : "application/json; charset=UTF-8",
        },
    }, function (res) {
        var body = "";
        res.on("data", function (chunk) {
            body += chunk;
        });
        res.on("end", function () {
            console.log(body)
        })
    });

    req.on("error", function (e) {
        console.error("ERROR:", e.message);
    });

    zlib.gzip(msg, function (error, result) {
        console.log("data:", result);
        req.write(result);
        req.end();
    });
};

exports.publish('{"hello":["world",123,null]}');

答案 1 :(得分:1)

通过PubNub实时发送图像

通常,您的主要挑战是图片尺寸。你的形象太大了。而且PubNub最多允许~34KB。您可以做的是在发送之前压缩和缩小图像。现代压缩效果非常好。

定义最大尺寸。 然后,通过min(maxwidth/width, maxheight/height)计算调整大小比率。

正确的尺寸为oldsize*ratio

当然还有一种库方法:方法Image.thumbnail 以下是PIL documentation中的(已编辑)示例。

import Image

size = 512, 512 # change this to match (check aspect ratio)

im = Image.open('./path/to/file.png')
im.resize( size, Image.ANTIALIAS )
im.save( './path/to/file.jpg', 'JPEG' )
im.close()

现在,您可以对新的.jpg文件进行base64编码,以通过PubNub发送。