You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

p5.js中如何在createImg创建的GIF动画上方绘图?

问题:Processing中绘制的点被GIF覆盖,如何让点显示在上方?

我编写的代码大致如下:

function setup(){
   createCanvas(400,400);
   pg = createGraphics(400,400);
   gif_createImg = createImg("my.gif");
    
}

function draw(){
    pg.clear();
    show(x,y,d);
    pg.strokeWeight(2*d);
    pg.point(x,y);
    image(pg,0,0);
}

function show(x,y,d) {
    gif_createImg.size(d,d);
    gif_createImg.position(x,y);
}

为什么绘制的点会出现在GIF下方?我明明在GIF之后调用了绘图代码。如何让点显示在GIF上方?我尝试使用createGraphics但没有效果(这是我第一次使用该功能)。我知道createImg创建的Element与point、image这类绘图元素表现不同(比如不受transform()影响等),但我找不到处理这类Element的相关说明或参考资料。


原因

createImg()创建的是DOM元素,它独立于Processing的canvas画布存在,默认会渲染在canvas的上层。不管你在draw()里怎么调用canvas的绘图逻辑(包括使用createGraphics绘制的内容),DOM元素都会直接盖在canvas上面,所以你看到点在GIF下方。

解决方法

方法一:将GIF绘制到Canvas中(推荐)

放弃使用DOM元素的createImg(),改用loadImage()加载GIF,然后像绘制普通图像一样把它画到canvas(或createGraphics创建的画布)上,这样所有内容都在同一个绘制层级里,顺序完全由代码控制。

示例代码:

let gifImg;

function setup(){
  createCanvas(400,400);
  pg = createGraphics(400,400);
  // 用loadImage加载GIF,替代createImg
  gifImg = loadImage("my.gif");
}

function draw(){
  pg.clear();
  // 先在pg画布上绘制GIF
  pg.image(gifImg, x, y, d, d);
  // 再绘制点,此时点会在GIF上方
  pg.strokeWeight(2*d);
  pg.point(x,y);
  // 将pg画布内容绘制到主画布
  image(pg,0,0);
}

方法二:调整DOM元素层级(适合必须用createImg的场景)

如果一定要保留createImg()创建的DOM元素,可以通过CSS的z-index属性调整层级,让canvas显示在GIF上方。

示例代码:

function setup(){
  createCanvas(400,400);
  pg = createGraphics(400,400);
  gif_createImg = createImg("my.gif");
  // 给GIF元素设置更低的层级,让它在canvas下方
  gif_createImg.style('z-index', '-1');
}

function draw(){
  pg.clear();
  // 先绘制点到pg画布
  pg.strokeWeight(2*d);
  pg.point(x,y);
  image(pg,0,0);
  // 再调整GIF的位置和大小
  show(x,y,d);
}

function show(x,y,d) {
  gif_createImg.size(d,d);
  gif_createImg.position(x,y);
}

注意:DOM元素的坐标是相对于页面的,而canvas内部坐标是自身画布的坐标,使用这种方法时要确保两者的坐标对应准确。


内容的提问来源于stack exchange,提问作者Kertaix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 05:47:26