Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在p5js中使用通过HTML DOM文件上传器上传的图像_Javascript_Html_Css_P5.js - Fatal编程技术网

Javascript 在p5js中使用通过HTML DOM文件上传器上传的图像

Javascript 在p5js中使用通过HTML DOM文件上传器上传的图像,javascript,html,css,p5.js,Javascript,Html,Css,P5.js,我试图允许用户通过DOM file uploader(即)上传他们的图像文件,但在我这么做之后,我不确定如何将图像移动到JavaScript并使用p5.js处理它。如何将HTML文件转换为p5.js文件或像素数组,或者转换为任何可以在JavaScript中使用或读取的值 首先,我限制元素只接受.png和.jpg文件 然后我尝试使用.file[0]语法,并尝试在loadImage()函数中使用.value通过其路径加载图像 两者都不起作用,我只是不确定从这一点上该怎么办 <div id="u

我试图允许用户通过DOM file uploader(即
)上传他们的图像文件,但在我这么做之后,我不确定如何将图像移动到JavaScript并使用p5.js处理它。如何将HTML文件转换为p5.js文件或像素数组,或者转换为任何可以在JavaScript中使用或读取的值

首先,我限制元素只接受
.png
.jpg
文件

然后我尝试使用
.file[0]
语法,并尝试在
loadImage()
函数中使用
.value
通过其路径加载图像

两者都不起作用,我只是不确定从这一点上该怎么办

<div id="uploadMenu">
  <h4>Please select your image file:</h4>
  <input accept=".png, .jpg, .jpeg" type="file" id="imageUpload">
  <button onclick="fileToGrid()">Done</button>
  <script>
  </script>
  <script>
  let thisWindow = document.getElementById("uploadMenu");
  let windowWidth = thisWindow.style.width;
  console.log(windowWidth);
  thisWindow.style.left = `${innerWidth/2 - 100}px`
  thisWindow.style.top = `${innerHeight/2 - 50}px`
  </script>
</div>

查看
createFileInput()
函数。参考文献是

从该页:

let img;

function setup() {
  input = createFileInput(handleFile);
  input.position(0, 0);
}

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

function handleFile(file) {
  print(file);
  if (file.type === 'image') {
    img = createImg(file.data);
    img.hide();
  } else {
    img = null;
  }
}
该页面上的示例显示了如何在P5.js中创建文件输入,然后从中获取图像


您可能也可以对DOM中的现有文件输入执行相同的操作。

我发布这篇文章已经有一段时间了,但我发现了这一点

所以我们首先找到upload dom元素,在这个例子中,我的id被称为“upload”

然后我们得到上传的文件

const myImageFile = selectedFile.files[0];
然后,我们可以通过执行以下操作创建图像的URL

let urlOfImageFile = URL.createObjectURL(myImageFile);
如果我们使用p5.js,我们现在可以这样做来获取p5jsImage对象

let imageObject = loadImage(urlOfImageFile);
如果您想绘制图像,我建议您在此基础上创建一个回调函数,因为它可能不会立即加载。总而言之,这就是:

const selectedFile = document.getElementById('upload');
const myImageFile = selectedFile.files[0];
let urlOfImageFile = URL.createObjectURL(myImageFile);
let imageObject = loadImage(urlOfImageFile, () => {image(imageObject, 0, 0)});

或者,您也可以使用相同的URL作为图像dom元素的src。

另外,我没有使用jQuery,主要是因为我还不太了解它是什么,我不确定它是否值得学习。我认为它可以工作,但我正在寻找一种不同的方法来实现这一点,而无需导入dom库。仅仅为了1分钟就导入整个库感觉不太好function@VadimKim你可以看看图书馆在幕后是如何做到这一点的。如果我是你,我会用图书馆。
let imageObject = loadImage(urlOfImageFile);
const selectedFile = document.getElementById('upload');
const myImageFile = selectedFile.files[0];
let urlOfImageFile = URL.createObjectURL(myImageFile);
let imageObject = loadImage(urlOfImageFile, () => {image(imageObject, 0, 0)});