如何制作完全透明的背景?

时间:2015-12-26 21:53:42

标签: processing

我尝试使用Processing中的以下代码生成简单图像:

int imageSize = 256;

void setup()
{
  size(256, 256);
  background(0, 0);
  noLoop();  
}

void draw()
{  
  float center = imageSize / 2.0;
  float maxDist = sqrt(128 * 128 * 2);

  for (int y = 0; y < imageSize; ++y)
  {
    for (int x = 0; x < imageSize; ++x)
    {
      float dist = sqrt(pow(x - center, 2) + pow(y - center, 2));
      float factor = dist / maxDist;
      stroke(255, 255, 255, 255 - 255 * factor);
      point(x, y);
    }    
  }  

  save("output.png");  
}

从代码中可以看出,输出图像在中心应该是不透明的,而在角落附近应该是透明的。但是,实际生成的PNG图像完全不透明:

output image

有什么方法可以解决这个问题吗?即以某种方式禁用背景或强制它完全透明?

1 个答案:

答案 0 :(得分:2)

您不能拥有透明框架,并且通过调用save()函数,您将当前框架保存到文件中。所以该文件永远不会有任何透明度。

相反,您应该创建自己的PGraphics实例,该实例始于完全透明。然后绘制并使用PGraphics.save()将其保存到文件中。像这样:

PGraphics img;

void setup() {
  size(100, 100);
  img = createGraphics(width, height);
}

void draw() {

  //draw to the image
  img.beginDraw();
  img.fill(255);
  img.ellipseMode(RADIUS);
  img.ellipse(mouseX, mouseY, 10, 10);
  img.endDraw();

  //optional: draw the PGraphics to the screen
  background(0);
  image(img, 0, 0);
}

//save the PGraphics to file
void mousePressed() {
  img.save("image_" + millis() + ".png");
}