gpt4 book ai didi

node.js - 将多个图像流通过管道传输到 ImageMagick/GraphicsMagick 子进程

转载 作者:搜寻专家 更新时间:2023-10-31 23:35:07 24 4
gpt4 key购买 nike

我能够将一个图像流通过管道传输到 ImageMagick 子进程中。我的代码基于 Pipe stream to graphicsmagick/imagemagick child process

我想合成多个图像流并将合成图像作为响应传输。这是我的 Node.js 代码,它从我的 AWS S3 存储桶中检索图像,然后将其传输为回复:

app.get('/composite_images', function(req, res){    
res.writeHead(200, {'Content-Type' : 'image/png'});

s3.get("/" + "fronttop.png").on("response", function(s3Res) {
// '-'' means standard in or stdin
var args = ['-', '-page', '+0+0', '-mosaic', '-'];
var convert = spawn("convert", args);

// This worked!
s3Res.pipe(convert.stdin);

convert.stdout.pipe(res);
convert.stderr.pipe(process.stderr);
}).end();
})

官方documentation

"At this time IM does not allow you to just read one image from such a stream, process it, and then read another single image. All IM commands will always read the whole stream, and then close it. This is being fixed as part of IMv7 scripted processing."

是否可以使用 GraphicsMagick/ImageMagick 合成多个图像流?

最佳答案

不确定这是否是您的意思,但请看一下。 ImageMagick 确实有一种流格式,它被称为MIFF 或Magick Image File Format。它允许图像通过管道一个接一个地流式传输。我不会说 node 但这是它在命令行中的样子:

{ convert -size 50x50 xc:red miff:- ; convert -size 50x50 xc:blue miff:- ; } | convert miff:- +append result.png

基本上,{} 是一个包含 2 个 ImageMagick convert 进程的复合语句,第一个将红色方形图像写入 MIFF< 中的标准输出 格式,第二个将蓝色方 block 写入其标准输出,也是 MIFF 格式。然后,两幅图像通过管道流式传输,并由第三个 convert 拾取,该第三个 convert 从其标准输入中读取红色和蓝色方 block ,并将它们并排连接起来。

enter image description here

以下是您可以如何在循环中使用它。小心不要在此过程中间将任何调试语句放在 stdout 上 - 曾经这样做并花了很长时间试图弄清楚为什么会破坏东西的人说!

#!/bin/bash
for c in red green blue cyan magenta yellow; do
convert -size 50x50 xc:$c miff:-
done | convert miff:- +append result.png

enter image description here

也许你现在可以看到如何做你想做的事......

关于node.js - 将多个图像流通过管道传输到 ImageMagick/GraphicsMagick 子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33071870/

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