Git Product home page Git Product logo

node-red-contrib-image-output's Introduction

๐Ÿž node-red-contrib-image-output

Simple image output node. Useful for previewing images (of face detecting, object recognition etc...) inside the Node-RED flow editor.

The expected input should be a jpg or png image, which need to be delivered in one of the following formats:

  • A buffer
  • A base64 encoded string
  • A Jimp object
  • A url to an image

Installation

Either use the Editor - Menu - Manage Palette - Install option, or run the following npm command in your Node-RED user directory (typically ~/.node-red):

npm i node-red-contrib-image-output

Node usage

This node can be used to preview images inside the Node-RED flow editor. The following examples explain how the different kind of input image formats can be visualized. All these example flows are also available via the 'Import' menu in the Node-RED flow editor.

Buffer input image

Apply an image as a binary Buffer (i.e. bits and bytes ...):

Buffer flow

[{"id":"46ffc819.b736f8","type":"http request","z":"30fb1577.8f556a","name":"","method":"GET","ret":"bin","paytoqs":false,"url":"https://dummyimage.com/200x150/000/fff&text={{{payload}}}","tls":"","persist":false,"proxy":"","authType":"","x":610,"y":640,"wires":[["d603e881.2fa1c8"]]},{"id":"25d928c1.708098","type":"inject","z":"30fb1577.8f556a","name":"Generate next image","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":200,"y":640,"wires":[["878f8ec1.effe4"]]},{"id":"878f8ec1.effe4","type":"function","z":"30fb1577.8f556a","name":"image counter","func":"var count = flow.get(\"count\")||0;\n\ncount++;\n\nnode.status({fill:\"blue\",shape:\"ring\",text:\"Image \" + count});\n\n// Save the new value back to context so it will be available next time\nflow.set('count',count);\n\n// Update the message payload and return - no need to create a new msg\nmsg.payload = \"Image \" + count;\nreturn msg;","outputs":1,"noerr":0,"x":420,"y":640,"wires":[["46ffc819.b736f8"]]},{"id":"d603e881.2fa1c8","type":"image","z":"30fb1577.8f556a","name":"","width":160,"data":"payload","dataType":"msg","thumbnail":true,"active":true,"x":800,"y":640,"wires":[]}]

Base64 input image

Apply an image as a base64 encoded string:

Base64 flow

[{"id":"46ffc819.b736f8","type":"http request","z":"30fb1577.8f556a","name":"","method":"GET","ret":"bin","paytoqs":false,"url":"https://dummyimage.com/200x150/000/fff&text={{{payload}}}","tls":"","persist":false,"proxy":"","authType":"","x":610,"y":640,"wires":[["27a53fad.5c768"]]},{"id":"25d928c1.708098","type":"inject","z":"30fb1577.8f556a","name":"Generate next image","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":200,"y":640,"wires":[["878f8ec1.effe4"]]},{"id":"878f8ec1.effe4","type":"function","z":"30fb1577.8f556a","name":"image counter","func":"var count = flow.get(\"count\")||0;\n\ncount++;\n\nnode.status({fill:\"blue\",shape:\"ring\",text:\"Image \" + count});\n\n// Save the new value back to context so it will be available next time\nflow.set('count',count);\n\n// Update the message payload and return - no need to create a new msg\nmsg.payload = \"Image \" + count;\nreturn msg;","outputs":1,"noerr":0,"x":420,"y":640,"wires":[["46ffc819.b736f8"]]},{"id":"27a53fad.5c768","type":"base64","z":"30fb1577.8f556a","name":"","action":"str","property":"payload","x":780,"y":640,"wires":[["d603e881.2fa1c8"]]},{"id":"d603e881.2fa1c8","type":"image","z":"30fb1577.8f556a","name":"","width":160,"data":"payload","dataType":"msg","thumbnail":true,"active":true,"x":960,"y":640,"wires":[]}]

Jimp input image

Apply an image as a Jimp object. This node allows Jimp images to be previewed, which are send by other Jimp related nodes. The following example shows a Jimp image, generated by the node-red-contrib-image-tools nodes:

Jimp flow

Note: the node-red-contrib-image-tools node should be installed, prior to importing this example.

[{"id":"27719e17.2169f2","type":"jimp-image","z":"30fb1577.8f556a","name":"","data":"payload","dataType":"msg","ret":"img","parameter1":"","parameter1Type":"msg","parameter2":"","parameter2Type":"msg","parameter3":"","parameter3Type":"msg","parameter4":"","parameter4Type":"msg","parameter5":"","parameter5Type":"msg","parameter6":"","parameter6Type":"msg","parameter7":"","parameter7Type":"msg","parameter8":"","parameter8Type":"msg","parameterCount":0,"jimpFunction":"none","selectedJimpFunction":{"name":"none","fn":"none","description":"Just loads the image.","parameters":[]},"x":770,"y":640,"wires":[["d603e881.2fa1c8"]]},{"id":"46ffc819.b736f8","type":"http request","z":"30fb1577.8f556a","name":"","method":"GET","ret":"bin","paytoqs":false,"url":"https://dummyimage.com/200x150/000/fff&text={{{payload}}}","tls":"","persist":false,"proxy":"","authType":"","x":610,"y":640,"wires":[["27719e17.2169f2"]]},{"id":"25d928c1.708098","type":"inject","z":"30fb1577.8f556a","name":"Generate next image","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":200,"y":640,"wires":[["878f8ec1.effe4"]]},{"id":"878f8ec1.effe4","type":"function","z":"30fb1577.8f556a","name":"image counter","func":"var count = flow.get(\"count\")||0;\n\ncount++;\n\nnode.status({fill:\"blue\",shape:\"ring\",text:\"Image \" + count});\n\n// Save the new value back to context so it will be available next time\nflow.set('count',count);\n\n// Update the message payload and return - no need to create a new msg\nmsg.payload = \"Image \" + count;\nreturn msg;","outputs":1,"noerr":0,"x":420,"y":640,"wires":[["46ffc819.b736f8"]]},{"id":"d603e881.2fa1c8","type":"image","z":"30fb1577.8f556a","name":"","width":160,"data":"payload","dataType":"msg","thumbnail":true,"active":true,"x":960,"y":640,"wires":[]}]

Hide image

When the node is currently displaying an image, that image can be hidden via those values:

  1. A null image (e.g. msg.payload = null).
  2. No image (e.g. delete msg.payload).
  3. An empty string image (e.g. msg.payload = "").

The following demo hides the previewed image based on the msg.payload:

hide image

[{"id":"acae4788.db10e8","type":"http request","z":"e2675d9d.6854e","name":"","method":"GET","ret":"bin","paytoqs":false,"url":"https://dummyimage.com/200x150/000/fff&text={{{payload}}}.jpg","tls":"","persist":false,"proxy":"","authType":"","x":570,"y":360,"wires":[["b548876a.e2f8b8"]]},{"id":"8ff5f74b.d2efb8","type":"inject","z":"e2675d9d.6854e","name":"Generate next image","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":200,"y":360,"wires":[["ea222193.08df9"]]},{"id":"ea222193.08df9","type":"function","z":"e2675d9d.6854e","name":"image counter","func":"var count = flow.get(\"count\")||0;\n\ncount++;\n\nnode.status({fill:\"blue\",shape:\"ring\",text:\"Image \" + count});\n\n// Save the new value back to context so it will be available next time\nflow.set('count',count);\n\n// Update the message payload and return - no need to create a new msg\nmsg.payload = \"Image \" + count;\nreturn msg;","outputs":1,"noerr":0,"x":400,"y":360,"wires":[["acae4788.db10e8"]]},{"id":"670b37d4.e67658","type":"inject","z":"e2675d9d.6854e","name":"Msg without payload","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":470,"y":260,"wires":[["6d9c5aa.2d5e6a4"]]},{"id":"b548876a.e2f8b8","type":"base64","z":"e2675d9d.6854e","name":"","action":"","property":"payload","x":720,"y":360,"wires":[["f8d56b3b.3bb1f8"]]},{"id":"6d9c5aa.2d5e6a4","type":"change","z":"e2675d9d.6854e","name":"","rules":[{"t":"delete","p":"payload","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":690,"y":260,"wires":[["f8d56b3b.3bb1f8"]]},{"id":"636d9da2.959fb4","type":"inject","z":"e2675d9d.6854e","name":"Msg with empty string","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":460,"y":300,"wires":[["6dce2d91.6158f4"]]},{"id":"c6c47147.1972a","type":"inject","z":"e2675d9d.6854e","name":"Msg with null value","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":470,"y":220,"wires":[["d21096f2.632ed8"]]},{"id":"6dce2d91.6158f4","type":"change","z":"e2675d9d.6854e","name":"msg.payload = \"\"","rules":[{"t":"set","p":"payload","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":690,"y":300,"wires":[["f8d56b3b.3bb1f8"]]},{"id":"d21096f2.632ed8","type":"function","z":"e2675d9d.6854e","name":"msg.payload = null","func":"msg.payload = null;\nreturn msg;","outputs":1,"noerr":0,"x":690,"y":220,"wires":[["f8d56b3b.3bb1f8"]]},{"id":"b99d140c.ce4448","type":"comment","z":"e2675d9d.6854e","name":"Multiple ways to hide the preview image:","info":"","x":520,"y":180,"wires":[]},{"id":"f8d56b3b.3bb1f8","type":"image","z":"e2675d9d.6854e","name":"","width":160,"data":"payload","dataType":"msg","thumbnail":false,"active":true,"x":920,"y":360,"wires":[]}]

Control image stream

Via the button on the right side, the image stream can be stopped or (re)started again:

image_output_deactivate

Remark: the server will stop sending images to the client, so there will be no more data traffic involved!

Node configuration

Width

The width (in pixels) that the image needs to be displayed in the flow. The height will be calculated automatically, with the same aspect ratio as the original image.

Property

Specify how the input image will be delivered to this node. By default the image needs to be delivered in the msg.payload of the input message.

Resize images on server side

By transferring smaller images the bandwith can be reduced, i.e. the number of bytes that is being send across the network. When too much data is pushed (across the websocket), the flow editor can become unresponsive.

  • When this option is activated, the images will be resized (to the specified width) on the server side. Then those small thumbnail images will be send to the browser, to reduce the bandwith.
  • When this option is not activated, the (original) large images will be send to the browser. Once they arrive there, the browser will resize them to the specified width. As a result much more data needs to be transferred between the server and the browser.

Caution: resizing images on the server will require server-side CPU usage. So it has to be decided what is prefered: lower bandwidth or lower cpu usage on the server. This decision will depend on the use case and hardware...

Allow image passthrough

When selected this adds an output wire to the node in order to pass the original message through to a following node. This performs better than forking the wires, however it does remove the enable/disable button.

node-red-contrib-image-output's People

Contributors

bartbutenaers avatar dceejay avatar rikukissa avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

node-red-contrib-image-output's Issues

node_status not blanked out when sending empty msg.payload + node_status not filled in when Resize images on server side

NR V3.1.0-beta.4

  1. when you send an empty msg.payload, the image is blanked but the node.status still shows the file name. You can fix this by sending a blank msg.file name.
    -- this can be corrected by adding a line to this code snippet in image.js (lines 81-85):

         // Reset the image in case an empty payload arrives
         if (!image || image === "") {
             sendImageToClient(null, msg);
             return;
         }
    

by changing it to this:
// Reset the image in case an empty payload arrives
if (!image || image === "") {
node.status(""); // blank out the status <==== this line added
sendImageToClient(null, msg);
return;
}

  1. if you check the 'Resize images on server side' option, the status is not filled in with the path to the image. This can be corrected by commenting out a line in this code snippet (lines 93-106):

         if (node.thumbnail) {  
             if (isJimpObject(image)) {
                 // Use the input Jimp image straight away, for maximum performance
                 resizeJimpImage(image, msg);
             }
             else {
                 if (!Buffer.isBuffer(image)) {
                     // Convert the base64 string to a buffer, so Jimp can process it
                     image = new Buffer.from(image.replace(/^data:image\/[a-z]+;base64,/, ""), 'base64');
                 }
                 oldimage = image;
                 Jimp.read(image).then(function(jimpImage) {
                     resizeJimpImage(jimpImage, msg); 
                 	// node.status("");               <==== comment out this line
    

Linking images to their ImageOutput nodes

Hi riku,

I'm not sure whether you get notifications about your Github issues, so will try to mention you here (@rikukissa).

Currently I'm using your node already all over the place, and it is really useful to analyze video related stuff in my flows.

When a lot of those ImageOutput nodes are being used in a single flow, it might become (a little bit) confusing which image belongs to which ImageOutput node. It is not a big deal, but I added a small enhancement to your code to make this a little bit more visual:

image

This is the new code:

  function render(id, data) {
    let $img = document.getElementById(`image-output-img-${id}`)

    if(!$img) {
      const $container = document.getElementById(id)
      if(!$container) {
        return
      }
      
      let $bubble = document.getElementById(`image-output-bubble-${id}`)
      const bubble = document.createElementNS("http://www.w3.org/2000/svg", 'polygon')
      bubble.setAttribute('id', `image-output-bubble-${id}`)
      bubble.setAttribute('style', 'fill:#a6bbcf')
      $container.insertBefore(bubble, $container.lastChild.nextSibling)

      const img = document.createElementNS("http://www.w3.org/2000/svg", 'image')
      img.setAttribute('id', `image-output-img-${id}`)
      img.setAttribute('width', `200`)
      img.setAttribute('y', `45`)
      $container.insertBefore(img, $container.lastChild.nextSibling)
      $img = img
    }
    
    $img.setAttribute('href', `data:image/png;base64,${data}`)
    
    $img.onload = function() {
        let bubbleId = this.id.replace("img", "bubble");
        let $bubble = document.getElementById(bubbleId)
    
        let imgBbox = this.getBBox()
        let left = imgBbox.x - 5
        let top = imgBbox.y - 5
        let right = imgBbox.x + imgBbox.width + 5
        let bottom = imgBbox.y + imgBbox.height + 5
        let points = left + "," + top + " " +
                     (left+50) + "," + top + " " +
                     (left+55) + "," + (top-10) + " " +
                     (left+60) + "," + top + " " +
                     right + "," + top + " " + 
                     right + "," + bottom + " " + 
                     left + "," + bottom
        $bubble.setAttribute('points', points)
    }
  }

The 'onload' event has been used to make sure that the image is loaded, and has it's correct width and height (via the bounding box).

If you like this visual effect, I can create a pull request (if you find that more convenient) ...

Thanks again,
Bart

split function

hello, could you show me the split function used on your example or sample flow code on redame?

Show image properties

Hi Riku (@rikukissa),

Here is your private stalker again ;-)
Have an idea, but want to get your opinion first ...

Suppose I want to get extra info about my video stream to debug it, like image speed / resolution / format. Currently I need to add some extra nodes to my flow, to accomplish this:

image

Note: in the flow in use my node-red-contrib-msg-speed node, but the ImageResolution node is just a test node that I created this evening (not available on npm yet!).

To use your contribution to simplify image debugging, it could be useful to show extra information. Do you think it would be useful to add this kind of info also to your contribution? Something like this:

image

Or do we have to keep this in separate nodes (like in the first screenshot), because a node should do a single thing? I would prefer to integrate it into your node, but keep it simple (e.g. only show speed per second, not minute ...). If they want more complex setup, then they need to use the speed node.

Kind regards,
Bart

Some documentation issues

Hi Riku,

Thanks for sharing this awesome contribution !!

Installation command

You have following installation command in your readme file:
npm install --save node-red-contrib-image-output

However that fails because you have published your node on NPM as red-contrib-image-output (so without a previx 'node'). This means it has to be installed like this:
npm install --save red-contrib-image-output

You can see the different installation commands on your NPM page:

image

Link from NPM to Github

Could you perhaps add a link from NPM to this Github page, by adding this stuff in your package.json file:

"bugs": {
        "url": "https://github.com/rikukissa/node-red-contrib-image-output/issues"
    },
    "homepage": "https://github.com/rikukissa/node-red-contrib-image-output",
    "repository": {
        "type": "git",
        "url": "https://github.com/rikukissa/node-red-contrib-msg-image-output"
    },

Then you get in the NPM page something similar to this:

image

This makes it easier for users to create issues, or have a look at your code to learn from it. Users like me :-)

Keywords

Perhaps add some more keywords to your package.json file (like image, ...), so users can search for your node more easily.

Missing image

On the readme page you show a nice image, that explains how the node can be used inside the Node-Red flow editor. However that image is not visible on your NPM page:

image

I have also been struggling with this, and I solved it with the following steps. Don't know if that is the best way to do it, but it works ...

  • I create a 'images' folder on my repository, where I upload my images:

    image

  • In the readme page I then insert the images like this:

    ![Startup](https://raw.githubusercontent.com/bartbutenaers/node-red-contrib-msg-speed/master/images/Startup.png)

Thanks a lot,
Bart Butenaers

readme.md: add hint to example for installing base64-node

hi,
i found on the jimp example the NOTE to install an extra image tools,
for good principles this is missing on the base64 example, as the base64-node is also prior necessary to install for the base64-example.

image


i am experimenting with the node, maybe also a good idea to give an example to inject a base64-text-image directy to the impage-output-node?

Buffers not displayed

Hi Riku,

Sorry to disturb you again.

Will first start with good news. When I use my node-red-contrib-multipart-stream-decoder node to get an MJPEG stream from my camera, your node still works great at 10 images per second:

image

But when I add your node directly behind my decoder node (which sends images as buffers) and before the base64 encoder, no image is displayed:

image
Some thoughts about this:

  • Are you sure that the node's input can be both a (not base64 encoded) Buffer or a base64 encoded string?

  • If the input is not correct, perhaps you can log an error or display a (red) node status. Because now you cannot see immediately if there is no input, or whether the input is incorrect...

  • Perhaps you could also display something like this to make it very user friendly (but only a nice to have):

    image

Now I will stop posting issues for today ;-)

Kind regards,
Bart

"Error: Invalid property expression: zero-length"

I am trying to import a flow from Bart B

And I get Invalid Source in image-output

[{"id":"46999a1f.6657d4","type":"exec","z":"18e47039.88483","command":"ffmpeg -f rtsp -i \"rtsp://37.252.126.204:1935/live/sys3.stream\" -f image2pipe pipe:1","addpay":false,"append":"","useSpawn":"true","timer":"","oldrc":false,"name":"Decode RTSP stream","x":1580,"y":1120,"wires":[["47938011.f1a51"],[],[]]},{"id":"996a1c4.7436de","type":"inject","z":"18e47039.88483","name":"Start stream","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1090,"y":1120,"wires":[["46999a1f.6657d4"]]},{"id":"47938011.f1a51","type":"image","z":"18e47039.88483","name":"","width":"200","x":1810,"y":1100,"wires":[]},{"id":"4cf9fc06.acfb84","type":"inject","z":"18e47039.88483","name":"Pause all streams","topic":"","payload":"SIGSTOP","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1110,"y":1160,"wires":[["8e3a27b3.abf538"]]},{"id":"cf50c10.31f664","type":"inject","z":"18e47039.88483","name":"Resume all streams","topic":"","payload":"SIGCONT","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1110,"y":1200,"wires":[["8e3a27b3.abf538"]]},{"id":"8e3a27b3.abf538","type":"change","z":"18e47039.88483","name":"","rules":[{"t":"set","p":"kill","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1330,"y":1160,"wires":[["46999a1f.6657d4"]]},{"id":"a359a2e3.a4f51","type":"inject","z":"18e47039.88483","name":"Stop all streams","topic":"","payload":"SIGTERM","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":1100,"y":1240,"wires":[["8e3a27b3.abf538"]]}]

Adjustable image heigth

Hi Riku (@rikukissa ),

Currently the width is defaulted to 200, and by your PR it is also adjustable. As mentioned have (locally) a test version that allows to adjust the width, by dragging with the mouse.

Do you think it would also be useful to make the height adjustable by the user?
Something like this:

image

By default the checkbox would be selected, so the height field is invisible and your node works like it used to do until now: the height is automatically calculated.

When the checkbox is deactivated, the height can be specified. Moreover in that case I could display some extra handles, to make sure the user can also change the height by using the mouse.

Two questions:

  • Do you think this is useful or a complete waste of time?
  • If useful, do you implement it or do I have to add it?

For my mouse dragging, I will have to start from your PR ...

Thanks again !!
Bart

Info about node: Add github-link to get documentation

hi,
great node!

as i followed your conversation here you mentioned your update of the documentation.
the info on the node is somehow sparse, maybe adding links to github helps out?

i use this links often on other nodes, as the info on github is mostly the most recent docu for the nodes. and one could instantly check issues. example:

image

Google face Detection - google vision flow

your node looks promising,
and the google face detetion flow on the readme.md even more.

do you have a link to this google-flow? or a link to a node-module?
may you put it on the readme.md?

thx,
๐Ÿ‘

Possible to add ability to close preview ?

Hi,

would it be possible to close the image preview on click so that the preview can be closed to clear up the desktop ?

Also... being a picky so and so .... (and do feel free to say no...:-)...
would it be possible to
a) move the image slightly right so the left edge lines up... - I have tried it with

  const left = imgBbox.x
  const top = imgBbox.y
  const right = imgBbox.x + imgBbox.width
  const bottom = imgBbox.y + imgBbox.height
  const points = left + "," + top + " " +
    (left + 35) + "," + top + " " +
    (left + 40) + "," + (top - 10) + " " +
    (left + 45) + "," + top + " " +
    right + "," + top + " " +
    right + "," + bottom + " " +
    left + "," + bottom

and then b) set the default width to 140px and so it all lines up by default :-)....

and then c) in the js file added

  if (msg.hasOwnProperty("filename")) {
    node.status({text:msg.filename});
 }

So if it comes direct from a file node you see the name as well :-)...

Finally I do wonder if Image preview is a better name ? (bit late now... but I guess the labels could change if not the name underneath (as that would break people)

Many thanks

Happy to raise a PR for this if you like.

RED.comms

Maybe the API has changed, but RED.comms.publish doesn't exist for me. Any ideas?

Adjustable image size

Hi Riku,

me again ;-)
Have tested your contribution, and I'm already a big fan ...

Currently the image width is fixed to '200':
img.setAttribute('width', "200")

As a result, the image preview is a little bit small in my flow editor, so I cannot see what is happening in the camera preview:

image

Could you please add an extra input field to the node's config screen, to make the width adjustable? I mean something like this:

    <div class="form-row">
        <label for="node-input-width"><i class="fa fa-arrows-h"></i> Width</label>
        <input type="number" id="node-input-width">
    </div>

Which could then e.g. get your default of 200:

    defaults: {
       width:  {value:200, required:true, validate:RED.validators.number()},
       name: { value: "" }
    },

Thanks again !!!!
Bart Butenaers

When upload image taken by camera of mobile phone, RangeError: Maximum call stack size exceeded

The phone is Samsung Note 10.

When I upload an image from the phone's photo library, it's OK.
When I upload image by taking picture, the error occured: RangeError: Maximum call stack size exceeded

The upload example is copied from here:
https://flows.nodered.org/flow/c70d0b4c54b583cf30c7e989b74feb68

This is the working screen capture:
ๅฑๅน•ๅฟซ็…ง 2021-03-22 11 20 22
This is the error screen capture:
ๅฑๅน•ๅฟซ็…ง 2021-03-22 11 20 58
ๅฑๅน•ๅฟซ็…ง 2021-03-22 11 21 05

If I remove the first image viewer, the "scaleToFit" node will report the same error.

The image uploaded is displayed on the "/upload" page, so the image is truly uploaded to Node-RED server.

Maybe the photo is too large? But I don't understand what's the difference between taking photo now and the photo already taken.
Should they be the same size?

Feature Request: Caption

Is there an easy way to add a caption to the image based on msg.caption or any other property?

base64 example output gives error on string-inject

as i am testing some things i observed the following:
using the base64 example produces output in debug node as a base64 string.
(image node works fine).

if i use this string on the inject-node it fails.
if i use another base64-image-string it works.

i cannot figure out whats wrong with the base64 output on debug from your example.
a base64 online-checker says its "malformatted".

a bug?

image

my test flow:

[{"id":"b25e45de.c83758","type":"tab","label":"base64 test","disabled":false,"info":""},{"id":"e2bd652.ebcd098","type":"inject","z":"b25e45de.c83758","name":"Generate next image","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":130,"wires":[["fa35a168.cb08c"]]},{"id":"fa35a168.cb08c","type":"function","z":"b25e45de.c83758","name":"image counter","func":"var count = flow.get(\"count\")||0;\n\ncount++;\n\nnode.status({fill:\"blue\",shape:\"ring\",text:\"Image \" + count});\n\n// Save the new value back to context so it will be available next time\nflow.set('count',count);\n\n// Update the message payload and return - no need to create a new msg\nmsg.payload = \"Image \" + count;\nreturn msg;","outputs":1,"noerr":0,"x":450,"y":130,"wires":[["d2ea584e.15c028"]]},{"id":"d2ea584e.15c028","type":"http request","z":"b25e45de.c83758","name":"","method":"GET","ret":"bin","paytoqs":false,"url":"https://www.gstatic.com/webp/gallery/4.sm.jpg?dcb_=0.6199151390652997","tls":"","persist":false,"proxy":"","authType":"","x":640,"y":130,"wires":[["e728b3a0.07951"]]},{"id":"e728b3a0.07951","type":"base64","z":"b25e45de.c83758","name":"","action":"str","property":"payload","x":810,"y":130,"wires":[["a2ca1d40.b9ccf","2eeef507.831ffa"]]},{"id":"d99ee71.a8a5018","type":"inject","z":"b25e45de.c83758","name":"failure: debug-output as input ","topic":"","payload":"/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCADxAUADASIAAhEBAxEB/8QAHAAAAQUBAQEAAAAAAAAAAAAABQACAwQGAQcI/8QARBAAAgECBQIEBAMEBwcEAwEAAQIDBBEABRIhMRNBBiJRYRQycYFCkbEHIzOhFTRScnPB8CQ1dLKz0eElYsLxCEOCU//EABsBAAIDAQEBAAAAAAAAAAAAAAIDAQQFAAYH/8QANBEAAQQABQEFBwQDAAMAAAAAAQACAxEEEiExQfAFEyJRYRQycYGRobEzwdHxFSPhBkJD/9oADAMBAAIRAxEAPwAGFx2ww4DCtj3a+f2uAYeuG8YcPfEKQU8KMdA3x1P5YeVtgUYKaVxwLq+uHjCHOIRWo9HG2EUBxPsRbCAt6YhSqrR2xzT7YvrGh2ub4ZJAAdsdamlS04WnFloSMRlCMch1UWnCKW5xJa2DbUzVmXUMJkXXArM0xF0jiJuFZh3Bvtbvhckgjq+U2KIyXW4QDThacXa00t41o1kCqtnaQ7u1+QOwtbbDaWlao6uhkXpxtIdRtcDcge+JzjLmOiHIc2UaqpoGO6N8WaWA1FTHCrIrO2kFzYA++Cmc5a6xtXwU6xUrP03jW56Mg2ZT6C42+uIdK1rgw8o2xOcwvHCBacPenlSGOV43WOW+hipAa3Nj3tgzRZMKnLPiDNGJJA4hQNY61K3DA9iGuCOLb4h8QQSU9RFC7oY1T92in5V4uRyCbXsd7W9MKGIa5+RvrfyTDh3Nj7x3pXzQkLi5R0cc1HXTyO6dCNWSy3DMWAAP5n8sclpClHT1CzQy...","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":680,"y":300,"wires":[["f7db9cc.89a536"]]},{"id":"f7db9cc.89a536","type":"image","z":"b25e45de.c83758","name":"","width":"500","data":"payload","dataType":"msg","thumbnail":false,"active":true,"x":990,"y":330,"wires":[]},{"id":"a2ca1d40.b9ccf","type":"image","z":"b25e45de.c83758","name":"","width":160,"data":"payload","dataType":"msg","thumbnail":true,"active":true,"x":990,"y":130,"wires":[]},{"id":"2eeef507.831ffa","type":"debug","z":"b25e45de.c83758","name":"base64.dbg","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":980,"y":70,"wires":[]},{"id":"52f5d0ef.138a9","type":"inject","z":"b25e45de.c83758","name":"working: sunpositions","topic":"","payload":"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","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":700,"y":360,"wires":[["f7db9cc.89a536"]]}]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.