From 0dd358644fbcde1fcfc9b14101438de0961eb00b Mon Sep 17 00:00:00 2001 From: MegaBrutal Date: Mon, 19 Dec 2022 01:00:00 +0100 Subject: [PATCH] Implement /gen/4 --- src/main.rs | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/src/main.rs b/src/main.rs index b9b9dfe..06f9e9b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,4 @@ +use std::f32::consts::PI; use std::convert::From; use std::env; use std::io::Cursor; @@ -5,7 +6,7 @@ use std::fmt::Display; use std::fmt; use std::borrow::BorrowMut; use std::sync::{Arc, Mutex}; -use log::{debug, warn, LevelFilter}; +use log::{debug, LevelFilter}; use num_traits::Zero; use num_traits::cast::AsPrimitive; use percent_encoding::percent_decode_str; @@ -296,31 +297,36 @@ async fn img_gen3(req: HttpRequest, path: web::Path) -> Result) -> Result { - let scale = path.into_inner(); - let signal = &mut extract_header!(req, "user-agent").bytes(); - let mut resimg: RgbImage = ImageBuffer::new(1600, 600); - let mut x: f32 = 0.0; +#[get("/gen/4/{dim_x}/{dim_y}/{scale}/{wave_offset_x}/{wave_offset_y}/{amplitude}/{freq}/{run}/{wave_color}/{data}")] +async fn img_gen4(req: HttpRequest, path: web::Path<(u32, u32, u32, u32, u32, f32, f32, u32)>) -> Result { + let (dim_x, dim_y, scale, wave_offset_x, wave_offset_y, amplitude, freq_base, run) = path.into_inner(); + let freq_base = freq_base / 1000.0; + let run: f32 = run as f32; + let wave_offset_y: f32 = wave_offset_y as f32; + let wave_color = extract_data!(req, 11); + debug!("Wave color input: {:?}", wave_color); + let wave_color = ToRgbIter::new(&mut percent_decode_str(wave_color)).next().unwrap_or(Rgb([255, 255, 255])); + debug!("Decoded color: {:?}", wave_color); + let signal = &mut percent_decode_str(extract_data!(req, 12)).peekable(); + let mut resimg: RgbImage = ImageBuffer::new(dim_x, dim_y); + let mut x: f32 = wave_offset_x as f32; let max_x: f32 = (resimg.width() - 1) as f32; - //let max_y: f32 = (resimg.height() - 1) as f32; - let run: f32 = 20.0; - let amplitude: f32 = 200.0; - let wave_offset: f32 = (resimg.height() / 2) as f32 + amplitude / 2.0 - 1.0; - let freq_base: f32 = 50.0; - while x < max_x { + let max_y: f32 = resimg.height() as f32; + while signal.peek().is_some() && (x < max_x) { let px = x; let s = signal.next().unwrap_or(0); - warn!("Next char: {:>1} {:#02X}", s as char, s); + //debug!("Next char: {:>1} {:#02X}", s as char, s); while ((x - px) < run) && (x < max_x) { let y = if s != 0 { - (x / (freq_base / s as f32)).sin() * amplitude + wave_offset + (2.0 * PI * freq_base * x * s as f32).sin() * amplitude + wave_offset_y } - else { wave_offset }; + else { wave_offset_y }; x += 0.001; - debug!("{x}, {y}"); - resimg.put_pixel(x as u32, y as u32, Rgb([255, 255, 255])); - resimg.put_pixel(x as u32, s.into(), Rgb([255, 0, 0])); + //debug!("{x}, {y}"); + if (y > 0.0) && (y < max_y) { + resimg.put_pixel(x as u32, y as u32, wave_color); + } + //resimg.put_pixel(x as u32, s.into(), Rgb([255, 0, 0])); } } let cursor = image_to_cursor(resimg, scale)?; -- 2.34.1