From: MegaBrutal Date: Fri, 23 Dec 2022 00:45:00 +0000 (+0100) Subject: Generalize make_png and use it in /gen/4 X-Git-Url: http://git.megabrutal.com/?p=litoprism.git;a=commitdiff_plain;h=78e35e128556ed35e465de6852f6c7d4366f8873 Generalize make_png and use it in /gen/4 --- diff --git a/src/main.rs b/src/main.rs index 4b461b7..f621684 100644 --- a/src/main.rs +++ b/src/main.rs @@ -261,13 +261,15 @@ fn apply_to_canvas<'a, F>(f: F, canvas_option: &'a mut Option, dimension Ok(canvas_option.insert(f(canvas, percent_decode_str(data).into_iter().borrow_mut())?)) } -fn make_png(dim_x: u32, dim_y: u32, scale: u32, data: &mut dyn Iterator) -> Result>, ImageError> { +fn make_png(dim_x: u32, dim_y: u32, scale: u32, data: &mut dyn Iterator, encode: F) -> Result>, ImageError> + where F: Fn(RgbImage, &mut dyn Iterator) -> Result +{ // Image must not be larger than 1 megapixel if dim_x * dim_y * scale > 1048576 { return Err(ImageError::dimension_error()) } - let img: RgbImage = rgb_encode(ImageBuffer::new(dim_x, dim_y), data)?; + let img: RgbImage = encode(ImageBuffer::new(dim_x, dim_y), data)?; let cursor = image_to_cursor(img, scale)?; Ok(cursor) } @@ -291,7 +293,7 @@ fn image_to_cursor(img: RgbImage, scale: u32) -> Result>, ImageEr #[get("/gen/0/{data}")] async fn img_gen0(req: HttpRequest) -> Result { let data = extract_data!(req, 3); - let cursor = make_png(32, 32, 16, percent_decode_str(data).into_iter().borrow_mut())?; + let cursor = make_png(32, 32, 16, percent_decode_str(data).into_iter().borrow_mut(), rgb_encode)?; Ok(response_image!(cursor)) } @@ -299,7 +301,7 @@ async fn img_gen0(req: HttpRequest) -> Result { async fn img_gen1(req: HttpRequest, path: web::Path<(u32, u32, u32)>) -> Result { let (dim_x, dim_y, scale) = path.into_inner(); let data = extract_data!(req, 6); - let cursor = make_png(dim_x, dim_y, scale, percent_decode_str(data).into_iter().borrow_mut())?; + let cursor = make_png(dim_x, dim_y, scale, percent_decode_str(data).into_iter().borrow_mut(), rgb_encode)?; Ok(response_image!(cursor)) } @@ -307,7 +309,7 @@ async fn img_gen1(req: HttpRequest, path: web::Path<(u32, u32, u32)>) -> Result< async fn img_gen2(req: HttpRequest, path: web::Path<(u32, u32, u32)>) -> Result { let (dim_x, dim_y, scale) = path.into_inner(); let data = extract_header!(req, "user-agent"); - let cursor = make_png(dim_x, dim_y, scale, &mut data.bytes())?; + let cursor = make_png(dim_x, dim_y, scale, &mut data.bytes(), rgb_encode)?; Ok(response_image!(cursor)) } @@ -334,8 +336,8 @@ async fn img_gen4(req: HttpRequest, path: web::Path<(u32, u32, u32, u32, u32, f3 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)); - let resimg = sine_encode(ImageBuffer::new(dim_x, dim_y), (wave_offset_x, wave_offset_y), amplitude, freq_base, run, wave_color, signal)?; - let cursor = image_to_cursor(resimg, scale)?; + let cursor = make_png(dim_x, dim_y, scale, signal, + |img, signal| sine_encode(img, (wave_offset_x, wave_offset_y), amplitude, freq_base, run, wave_color, signal))?; Ok(response_image!(cursor)) }