p5.j​​s Í 如何将前 N 帧作为图像循环播放?

Posted

技术标签:

【中文标题】p5.j​​s Í 如何将前 N 帧作为图像循环播放?【英文标题】:p5.js Í How do I play first N frames as images in a loop? 【发布时间】:2021-12-18 05:24:43 【问题描述】:

在下面的代码中我想:

    将相机拍摄的前 5 秒保存为帧 然后每次在 draw() 循环中,我想在画布上绘制第一帧,然后在下一个绘制循环中绘制第二帧,依此类推,直到我到达终点并从顶部开始。

但是,这不起作用,我相信这是因为每个帧的 imageData 是一个 data:image/octet-stream;base64,.... 字符串,我不确定如何在画布上绘制。

const FRAME_RATE = 10
const CAPTURE_DURATION = 5 // secs

let framesCaptured = []
let i = 0

function setup() 
  frameRate(FRAME_RATE)
  
  let video = createCapture(VIDEO)
  
  video.hide()
  
  createCanvas(640, 480)
  
  saveFrames('frames', 'png', CAPTURE_DURATION, FRAME_RATE, (frames) => 
    framesCaptured = frames.map(( imageData ) => 
      return imageData
    )
  )


function draw() 

  if (i < framesCaptured.length) 
    image(loadImage(framesCaptured[i]), 0, 0)
    i = i === framesCaptured.length - 1 ? 0 : i+1
  

顺便说一句,重要的是我可以访问并循环遍历各个帧图像,因为我稍后会将它们发送到服务器。

【问题讨论】:

【参考方案1】:

LoadImage 可以处理 base64 编码的图像,但您必须在字符串前面添加“data:image/png;base64”。 你可以试试 loadImage("data:image/png;base64,"+framesCaptured[i])

(https://p5js.org/reference/#/p5/loadImage)

【讨论】:

恐怕我已经试过了,谢谢。 framesCaptured[i] 已经包含 data:... 前缀,但它是 data:image/octet-stream;base64, ....

以上是关于p5.j​​s Í 如何将前 N 帧作为图像循环播放?的主要内容,如果未能解决你的问题,请参考以下文章

html p5.j​​s中的循环也取自http://p5js.org/examples/examples/Math_Random.php

p5.j​​s:如何在不改变背景或使用外部画布的情况下在画布形状上打孔?

p5.j​​s 时间问题

html p5.j​​s + p5.dom.js + clmtracker.js

html p5.j​​s中的颜色

html p5.j​​s中的基本形状