gpt4 book ai didi

javascript - 加载从 p5.js Canvas 中的函数生成的图像

转载 作者:行者123 更新时间:2023-11-30 20:23:45 24 4
gpt4 key购买 nike

我正在尝试加载作为名为 gaborgen.js 的库中的函数返回的图像

我的想法是,我应该能够使用这个库生成 Gabor 补丁图像,然后我需要将其存储在 p5 中的图像变量中,并将其显示在 Canvas 上。

库的工作方式是它有一个接受两个参数的函数 gaborgen(),因此 gaborgen(50,50) 将返回具有这些属性的 Gabor 补丁。该库的工作方式是将图像作为 base64 PNG 返回。

我尝试如下加载图片,但失败了。生成的草图只是一个空白屏幕。

var img;

function setup() {
createCanvas(640, 360);
img = createImg(gaborgen(50,40));

}

function draw(){
background(0);
image(img, 0, 0, img.elt.width, img.elt.height);
}

Gaborgen.js库中的gaborgen()函数如下;

gaborgen = function(tilt, sf) {
var a, aspectratio, b, contrast, gab_x, gab_y, gridArray, i, j, m, multConst, phase, preSinWave, ref, reso, sc, scaledM, sf_max, sf_min, sinWave, tilt_max, tilt_min, varScale, x, x_centered, x_factor, y, y_centered, y_factor;
if ((tilt > 100 || tilt < 1) || (sf > 100 || sf < 1)) {
console.log("ERROR: gaborgen arguenment input out of bounds");
}
reso = 400;
phase = 0;
sc = 50.0;
contrast = 100.0;
aspectratio = 1.0;
tilt_min = 0;
tilt_max = 90;
sf_min = .01;
sf_max = .1;
tilt = rescale_core(tilt, tilt_min, tilt_max, 1, 100);
sf = rescale_core(sf, sf_min, sf_max, 1, 100);
x = reso / 2;
y = reso / 2;
a = numeric.cos([deg2rad(tilt)]) * sf * 360;
b = numeric.sin([deg2rad(tilt)]) * sf * 360;
multConst = 1 / (numeric.sqrt([2 * pi]) * sc);
varScale = 2 * numeric.pow([sc], 2);
gridArray = numeric.linspace(0, reso);
ref = meshgrid(gridArray), gab_x = ref[0], gab_y = ref[1];
x_centered = numeric.sub(gab_x, x);
y_centered = numeric.sub(gab_y, y);
x_factor = numeric.mul(numeric.pow(x_centered, 2), -1);
y_factor = numeric.mul(numeric.pow(y_centered, 2), -1);
preSinWave = numeric.add(numeric.add(numeric.mul(a, x_centered), numeric.mul(b, y_centered)), phase);
i = 0;
while (i < reso) {
j = 0;
while (j < reso) {
preSinWave[i][j] = deg2rad(preSinWave[i][j]);
j += 1;
}
i += 1;
}
sinWave = numeric.sin(preSinWave);
m = numeric.add(.5, numeric.mul(contrast, numeric.transpose(numeric.mul(numeric.mul(multConst, numeric.exp(numeric.add(numeric.div(x_factor, varScale), numeric.div(y_factor, varScale)))), sinWave))));
scaledM = rescale(m, 0, 254);
return numeric.imageURL([scaledM, scaledM, scaledM]);
};

知道如何将函数返回的 base64 PNG 加载到 p5.js 中吗?

最佳答案

通过将字符串直接传递到 loadImage() 函数,您可以直接在 P5.js 中使用 base-64 编码图像。这是一个例子:

var img;

function setup() {
createCanvas(400, 400);
img = loadImage('data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==');
}

function draw() {
background(220);
image(img, 0, 0, width, height);
}

注意参数的 data:image/png;base64, 部分。

我不知道 gaborgen() 函数返回什么,所以你需要做一些 debugging找出你的代码崩溃的确切位置。 Work forward in smaller steps并检查你的 developer tools错误。

关于javascript - 加载从 p5.js Canvas 中的函数生成的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51157895/

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