From e02b1eeb746203094bc86095e85a68614ae17c03 Mon Sep 17 00:00:00 2001 From: MegaBrutal Date: Mon, 18 Jul 2022 01:45:00 +0200 Subject: [PATCH] Implement image_to_cursor to avoid redundant code --- src/main.rs | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/main.rs b/src/main.rs index f502a9d..6e06fab 100644 --- a/src/main.rs +++ b/src/main.rs @@ -223,6 +223,22 @@ fn make_png(dim_x: u32, dim_y: u32, scale: u32, data: &mut dyn Iterator Result>, ImageError> { + let (dim_x, dim_y) = img.dimensions(); + let (dim_x, dim_y) = (dim_x * scale, dim_y * scale); + + // Image must not be larger than 1 megapixel + if dim_x * dim_y > 1048576 { + return Err(ImageError::dimension_error()) + } + + let mut cursor = Cursor::new(Vec::new()); + let img = resize(&img, dim_x, dim_y, FilterType::Nearest); + to_imageresult(write_buffer_with_format(&mut cursor, &img, dim_x, dim_y, ColorType::Rgb8, Png))?; + Ok(cursor) +} + + #[get("/gen/0/{data}")] async fn img_gen0(req: HttpRequest) -> Result { let data = req.uri().path().split("/").skip(3).next().unwrap(); @@ -245,16 +261,12 @@ async fn img_gen1(req: HttpRequest, path: web::Path<(u32, u32, u32)>) -> Result< #[get("/pgen/0/{data}")] async fn img_pgen0(req: HttpRequest, canvas0: web::Data>>) -> Result { let data = req.uri().path().split("/").skip(3).next().unwrap(); - let mut cursor = Cursor::new(Vec::new()); let scale = 16; let img: RgbImage = ({ let canvas_option = &mut *canvas0.lock().unwrap(); Ok(apply_to_canvas( |c, d| to_canvasresult(rgb_encode_to_canvas(c, d)), &mut canvas_option.0, None, data)?.img.clone()) } as Result)?; - let (tdim_x, tdim_y) = img.dimensions(); - let (tdim_x, tdim_y) = (tdim_x * scale, tdim_y * scale); - let img = resize(&img, tdim_x, tdim_y, FilterType::Nearest); - to_imageresult(write_buffer_with_format(&mut cursor, &img, tdim_x, tdim_y, ColorType::Rgb8, Png))?; + let cursor = image_to_cursor(img, scale)?; Ok(HttpResponse::build(StatusCode::OK) .content_type("image/png") .body(cursor.into_inner())) @@ -268,11 +280,7 @@ async fn img_pgen1(req: HttpRequest, path: web::Path<(u32, u32, u32)>, canvas1: let canvas_option = &mut *canvas1.lock().unwrap(); Ok(apply_to_canvas( |c, d| to_canvasresult(rgb_encode_to_canvas(c, d)), &mut canvas_option.0, Some((dim_x, dim_y)), data)?.img.clone()) } as Result)?; - let (tdim_x, tdim_y) = img.dimensions(); - let (tdim_x, tdim_y) = (tdim_x * scale, tdim_y * scale); - let img = resize(&img, tdim_x, tdim_y, FilterType::Nearest); - let mut cursor = Cursor::new(Vec::new()); - to_imageresult(write_buffer_with_format(&mut cursor, &img, tdim_x, tdim_y, ColorType::Rgb8, Png))?; + let cursor = image_to_cursor(img, scale)?; Ok(HttpResponse::build(StatusCode::OK) .content_type("image/png") .body(cursor.into_inner())) -- 2.34.1