【作品66】ピクセル化した4枚の画像をランダムな位置に表示させる

【作品No.66】ピクセル化した4枚の画像をランダムな位置に表示させる
  • URLをコピーしました!

この記事を書いた人

クリエイティブコーダー Watataku のプロフィール写真
ワタタク(Watataku)

上達の研究家 / アーティスト

「才能」ではなく「論理(システム)」で、人の心を動かす機能するアートを探究中

【文系・36歳・未経験】から独学でクリエイティブコーディングに挑戦し、独自の思考法で以下の実績を達成

  • 開始1年8ヶ月目までに公募6つに挑戦し、3つ入選(勝率50%)
  • 開始1年9ヶ月目に、虎ノ門ヒルズ ステーションタワー49階 スカイガーデン&プールのために制作した作品が展示される
目次

作品の画像とコード

アニメーション。

PImage[] imgs = new PImage[4];
float pixelSize = 50; // 初期ピクセルサイズ
float growthRate = 7; // サイズ変更の速さ

// ランダムな位置とサイズを格納する配列
int[] offsetsX = new int[4];
int[] offsetsY = new int[4];
int[] widths = new int[4];
int[] heights = new int[4];

void setup() {
  size(1080, 1080);
  frameRate(60);
  smooth();

  // 画像をロード
  imgs[0] = loadImage("1.jpg");
  imgs[1] = loadImage("2.jpg");
  imgs[2] = loadImage("3.jpg");
  imgs[3] = loadImage("4.jpg");

  // ランダムな位置とサイズを生成
  for (int i = 0; i < 4; i++) {
    widths[i] = int(random(300, width)); // 幅を画面に合わせた大きさでランダムに
    heights[i] = int(random(300, height)); // 高さを画面に合わせた大きさでランダムに
    offsetsX[i] = int(random(0, width - widths[i])); // X位置をランダムに
    offsetsY[i] = int(random(0, height - heights[i])); // Y位置をランダムに
  }
}

void draw() {
  background(0);

  // 4つのランダムな画像を描画
  for (int i = 0; i < 4; i++) {
    drawImageAt(imgs[i], offsetsX[i], offsetsY[i], widths[i], heights[i]);
  }

  // ピクセルサイズを変更
  pixelSize += growthRate;
  if (pixelSize >= 50 || pixelSize <= 10) {
    growthRate *= -1; // 逆方向へ切り替え

    // 新しいランダム位置とサイズを設定
    for (int i = 0; i < 4; i++) {
      widths[i] = int(random(300, width)); // 大きなサイズ範囲に調整
      heights[i] = int(random(300, height));
      offsetsX[i] = int(random(0, width - widths[i]));
      offsetsY[i] = int(random(0, height - heights[i]));
    }
  }
}

void drawImageAt(PImage img, int offsetX, int offsetY, int imgWidth, int imgHeight) {
  PImage resizedImg = img.copy();
  resizedImg.resize(imgWidth, imgHeight); // ランダムサイズにリサイズ

  for (int y = 0; y < imgHeight; y += int(pixelSize)) {
    for (int x = 0; x < imgWidth; x += int(pixelSize)) {
      color c = resizedImg.get(x, y); // 元画像から色を取得
      fill(c);
      noStroke();
      rect(offsetX + x, offsetY + y, pixelSize, pixelSize); // ピクセル化して描画
    }
  }
}
ワタタク

それでは今日もレッツワクワクコーディング。

ワタタク(Watataku)
上達の研究家
アナログ絵画(2025.11~) × クリエイティブコーディング(2024.3~)

「不完全な人間(Analog)」が、「完全な論理(Algorithm)」を武器にどこまで行けるか。

手描きの一本の線(One)をコードで無限(All)に拡張し、再び一つの作品へ定着させる。「才能」ではなく「発見」と「システム」で描く、人生をかけた実験記録。

溢れる思考を、独自の脳内OS「Watataku Blueprint」で整理し、初心者から世界で活躍するまでの「激闘」と「攻略本」を公開しています。

▼【創作×上達】思考を「作品」に変える、モレスキン6冊の運用設計図
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次