【问题标题】:How to pass multiple JPEG images to convert through pipe?如何通过管道传递多个JPEG图像进行转换?
【发布时间】:2015-09-24 13:39:50
【问题描述】:
var spawn = require('child_process').spawn
var fs = require('fs')
var Readable = require('stream').Readable

var stream = new Readable()
var img1 = fs.readFileSync('img1.jpg')
var img2 = fs.readFileSync('img2.jpg')
stream.push(img1)
stream.push(img2)
stream.push(null)
var convert = spawn('convert', ['jpg:fd:0', 'out.gif'])
stream.pipe(convert.stdio[0])

抛出

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: write EPIPE
    at errnoException (net.js:905:11)
    at Object.afterWrite (net.js:721:19)

但是当我只将一张图片推送到管道时它会起作用。所以现在转换似乎不是我通过一个流传递多个图像并且它只是在接收到第一张图像后关闭管道......是否可以通过管道传递许多 JPEG 图像进行转换?

【问题讨论】:

    标签: node.js imagemagick imagemagick-convert


    【解决方案1】:

    JPEG 不是 ImageMagick 的 “流媒体” 格式,这意味着您不能简单地将多个 JPEG 文件连接在一起并期望 ImageMagick 将它们整理出来。唯一的流格式是 MIFF,因此您必须将文件连接在一起作为 MIFF 流并从那里进入 ImageMagick

    这可以澄清...我将page0.gif 转换为MIFF 并将其发送到stdout,然后将page1.gif 转换为MIFF 并将其附加到输出流。然后我开始一个新的convert 并从合并的MIFF 流中读取两个文件并从中制作2个GIF文件:

    { convert page0.gif miff:- ; convert page1.gif miff:- ; } | convert miff:- out-%d.gif
    
    -rw-r--r--   1 mark  staff   10383 24 Sep 16:29 out-1.gif
    -rw-r--r--   1 mark  staff   11778 24 Sep 16:29 out-0.gif
    

    或者您可以在一个流上发送一个 JPEG,在另一个流上发送另一个 JPEG,然后告诉 ImageMgick 从一个然后读取另一个,即:

    convert fd:0 fd:1 out.gif
    

    另外,您希望ImageMagick 对这两个文件做什么?你想让它们并排附加吗?还是将一个附加在另一个之上?还是写入两个单独的文件?你的意图不太清楚。

    如果你想用它们制作动画 GIF,你应该做 node.js 等效的:

    { convert page0.gif miff:- ; convert page1.gif miff:- ; } | convert miff:- -delay 100 out.gif
    

    【讨论】:

    • 我想从内存中的图像创建动画 gif。我认为它可以像在 FFMPEG 中一样工作,我可以在单个流中传递多个 JPEG 图像并将视频作为输出......
    • 好的,请在底部查看我的更新 - 您需要添加 -delay
    • 好吧,我仍然需要生成 N 个进程来将 JPEG 转换为 MIFF,然后再生成一个进程来将它们连接到 gif,这会非常慢。无论如何,我会接受你的回答。
    【解决方案2】:

    默认情况下,当源流发出 end 时,会在目标上调用 end(),因此目标不再可写。传递 { end: false } 作为保持目标流打开的选项。

    image1Stream.pipe(writer, { end: false });
    image2Stream.pipe(writer);
    

    【讨论】:

      猜你喜欢
      • 2019-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 2022-01-12
      • 2019-09-25
      相关资源
      最近更新 更多