Я попытался сохранить 27 изображений в p5. js, но только 10 из них были сохранены в моей папке загрузок. Почему не сохранены все файлы? - PullRequest
0 голосов
/ 10 апреля 2020

В своем коде я пытаюсь сохранить 27 изображений в мою папку загрузок, но когда я запускаю код, в моей папке загрузок сохраняется не более 10 изображений. Я зарегистрировал свои результаты в консоли, и код, кажется, работает правильно. Сначала я думал, что Chrome или онлайн p5. js Веб-редактор имел проблему с слишком большим количеством запросов на сохранение, отправляемых одновременно, поэтому я пытался отложить несколько секунд после каждого сохранения, но этот подход не работал , Существует ли ограничение на количество скачиваний, разрешенных Chrome с одного сайта (возможно, в течение определенного времени)?

Я знаю, что код не эффективен, но скорость не важна сейчас, так как я просто что-то тестирую, а циклы for структурированы таким образом по определенной c причине.

let t, w, img, mod, p, dim;

function preload() {
//image loaded
img = loadImage("rose.jpg");
}

function update(pos, a, b, c) {
  let i = img.pixels[pos + a];
  let j = img.pixels[pos + b];
  let k = img.pixels[pos + c];
  let l = img.pixels[pos + 3];
  return [i, j, k, l];
}

function setup() {
  // modified image created and its pixels loaded
 image(img, 0, 0, width, height);
  mod = createImage(img.width, img.height);
  img.loadPixels();
  mod.loadPixels();

  // 3 for loops make counter for image names
  for (let i = 0; i < 3; i++) {
    for (let j = 0; j < 3; j++) {
      for (let k = 0; k < 3; k++) {
        //loop through the pixels of the image
        for (let l = 0; l < mod.height * 4; l++) {
          //m is incremented by 4 so each set of rgba values can be manipulated by the update function
          for (let m = 0; m < mod.width; m += 4) {
            //pixel index is calculated and update returns an array of pixel values
            w = img.width * l + m;
            t = update(w, i, j, k);
            for (let n = 0; n < 4; n++) {
              mod.pixels[w + n] = t[n];
            }
          }
        }
        //canvas is created and image is displayed
        mod.updatePixels();
        dim = 550;
        createCanvas(dim, dim);
        image(mod, 0, 0, width, height);
        //save request
        save(mod, ("edited" + i + j + k + ".jpg"));
      }
    }
  }
}

1 Ответ

0 голосов
/ 10 апреля 2020

P5. js с открытым исходным кодом. Вы можете просмотреть исходный код, который загружает файлы здесь в функции p5.prototype.downloadFile.

Я не вижу никаких ограничений относительно количества загружаемых файлов, так что я думаю, что это либо из браузера, либо из библиотеки , которую p5. js использует для сохранения файлов. Возможно, вы захотите опробовать другие браузеры или посмотреть, есть ли ограничение в библиотеке сохранения файлов.

Для чего это стоит, я попробовал это, используя этот упрощенный пример:

function setup() {
  createCanvas(400, 400);
}

function draw() {
  background(220);
  ellipse(mouseX, mouseY, 20, 20);
  // save(frameCount + ".png");
}

function mouseClicked() {
  for(let i = 0; i < 100; i++) {
    save(i + ".png");
  }
}

Если Я щелкаю мышью, после чего сохраняются только 10 изображений. Интересно, что они не всегда являются первыми 10, поэтому между вызовами сохранения происходит какая-то гонка.

Однако, если я раскомментирую вызов save(), который находится внутри функции draw(), затем сохраняется более 10, но кажется, что большинство изображений пропущено.

...