0
0

はじめに

下記でアナログ時計を作った構成を利用し、

Rustのrandを使ってRandomArt挑戦してみようと思います

前回作ったアナログ時計について

プロジェクトの作成

Rustで縦横320の無地の画像に用意。

320内におさまるランダムな大きさのランダムな色の円を4つほど書いてみる。

最後に、Base64の文字列を返す。

lib.rs

// 省略

#[wasm_bindgen]
pub fn trick_png() -> String{
    let mut img = DynamicImage::new_rgba8(320,320);
    // 円の中心座標
    let center_x = img.width() / 2;
    let center_y = img.height() / 2;
    let mut rng = rand::thread_rng();
    for _i in 0..=4 {
        draw_filled_circle_mut(&mut img, (center_x as i32, center_y as i32), rng.gen_range(0..=155), Rgba([rng.gen_range(0..=255), rng.gen_range(0..=255), rng.gen_range(0..=255), 255]));
    }

    let mut buffer = Cursor::new(Vec::new());
    img.write_to(&mut buffer, ImageFormat::Png).unwrap();
    let base64_string = general_purpose::STANDARD.encode(buffer.get_ref());
    // データURL形式で返す
    format!("data:image/png;base64,{}", base64_string)
}

// 省略

JavascriptのsetIntervalで上記の関数を呼び出して動かす。

なんとなく秒数べつに用意してみる。

index.js

// 省略

setInterval(()=>{
    document.getElementById("mainImg1").src = trick_png();
}, 10);
setInterval(()=>{
    document.getElementById("mainImg2").src = trick_png();
}, 100);
setInterval(()=>{
    document.getElementById("mainImg3").src = trick_png();
}, 1000);

// 省略

これで実装完了!!

今回の成果物

デモURL

デモ画像

Rustのrand使ってRandomArt作ってみた_001.jpg

ソース

まとめ

今回はRustのrandを使ってアートに挑戦してみました。🧑‍🎨

作っている最中に目が回りました😰

randについて

※間違い等ありましたら、ご指摘いただけると助かります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0