javascript - p5.js loadPixels() 与用户上传返回全零数组
问题描述
我正在编写的应用程序需要用户上传图像。图片上传后,我想得到一个所有像素的数组。
以下代码实现了这一点,但是,上传的第一张图片总是返回一个 zeros 数组。
let img;
let input;
function setup() {
input = createFileInput(handleFile);
input.position(0, 0);
}
function draw() {
if (img) {
image(img, 0, 0, width, height);
}
}
imageCallback = (img) => {
let c = get();
console.log(pixels);
}
function handleFile(file) {
if (file.type === 'image') {
img = createImg(file.data, imageCallback);
img.hide();
}
}
图片上传结果(第二张图片总是有一个填充的像素数组):
我在添加功能之前收到了这个错误imageCallback
,希望能解决这个问题。它没有,所以我现在在这里。
任何帮助表示赞赏!
编辑:工作解决方案
正如@KevinWorkman 在下面指出的那样,我还没有将图像写入画布。
我重写了代码,以便回调确保图像在运行之前已加载并写入画布get()
。
let input;
function setup() {
input = createFileInput(handleFile);
input.position(0, 0);
}
function handleFile(file) {
if (file.type === 'image') {
loadImage(file.data, img => {
image(img, 0, 0, width/2, height);
get();
console.log(pixels)
});
}
}
解决方案
看看这一行:
let c = get();
请注意,这是调用通用get()
函数,该函数返回画布的像素数组。另请注意,此时,您尚未将图像绘制到画布上。这就是为什么此时这一切都是零。
然后你使用这条线将图像绘制到画布上:
image(img, 0, 0, width, height);
现在如果你上传一张新图片,你再次运行第一行,它返回画布的像素数组。此时,画布仍将显示之前加载的图像!这不是新加载图像的像素数组!
您可能需要该p5.Image.get()
功能而不是通用get()
功能。您可以在参考资料中找到更多信息。
推荐阅读
- ssl - 结合 Godaddy 和 cloudflare 时的 SSL 问题
- r - 具有不连续 x 轴的直方图
- performance - 如何缩小“谷歌优化”javascript文件
- sql - 刷新物化视图。Postgres
- python - ModuleNotFoundError:没有名为“scrapy-redis”的模块
- php - 如何在 jquery 中显示特定的 div?
- visual-studio-code - VS Code 中的 Jupyter Notebook:内联输入()?
- go - 如何为嵌套结构运行 go-pg orm QueryContext 函数?
- x86-64 - Intel Optane Persistent Memory 上 `clwb` 和 `ntstore` 的延迟是多少?
- certificate - 自签名 IdentityServer4 签名凭证在生产中是否足够好?