From d7b77b1c27de2496d573c9630436f486cadb86d3 Mon Sep 17 00:00:00 2001 From: MegaBrutal Date: Sun, 26 Jun 2022 00:00:00 +0200 Subject: [PATCH] Generic make_png function --- src/main.rs | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/src/main.rs b/src/main.rs index 53849d9..faa1ad8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,7 +8,7 @@ use percent_encoding::percent_decode_str; use actix_web::{get, web, App, HttpServer, HttpRequest, HttpResponse, Responder, ResponseError, Result}; use actix_web::body::BoxBody; use actix_web::http::StatusCode; -use image::{ImageBuffer, ColorType, Rgb, RgbImage, write_buffer_with_format}; +use image::{ImageBuffer, ColorType, Pixel, Rgb, RgbImage, write_buffer_with_format}; use image::ImageOutputFormat::Png; use image::imageops::{FilterType, resize}; @@ -70,32 +70,45 @@ async fn greet(name: web::Path, req: HttpRequest) -> impl Responder { format!("Hello {name}!") } -#[get("/gen/0/{data}")] -async fn img_gen(req: HttpRequest) -> Result { - let mut cursor = Cursor::new(Vec::new()); - let mut img: RgbImage = ImageBuffer::new(32, 32); +fn make_png(dim_x: u32, dim_y: u32, scale: u32, data: &str) -> Result>, ImageError> { + let mut img: RgbImage = ImageBuffer::new(dim_x, dim_y); let mut pixels = img.pixels_mut(); - let data = req.uri().path().split("/").skip(3).next().unwrap(); - println!("{:?}", data); for sp in ToRgbIter::new(percent_decode_str(&data).into_iter().borrow_mut()) { let mut dp = pixels.next().unwrap(); println!("{:?}", sp); dp.0 = sp.0; } - let img = resize(&img, 512, 512, FilterType::Nearest); - println!("Here!"); - to_imageresult(write_buffer_with_format(&mut cursor, &img, 512, 512, ColorType::Rgb8, Png))?; + let tdim_x = dim_x * scale; + let tdim_y = dim_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))?; + Ok(cursor) +} + +#[get("/gen/0/{data}")] +async fn img_gen0(req: HttpRequest) -> Result { + let data = req.uri().path().split("/").skip(3).next().unwrap(); + let cursor = make_png(32, 32, 16, &data)?; Ok(HttpResponse::build(StatusCode::OK) .content_type("image/png") .body(cursor.into_inner())) } +#[get("/gen/1/{dim_x}/{dim_y}/{scale}/{data}")] +async fn img_gen1(req: HttpRequest, dim_x: web::Path, dim_y: web::Path, scale: web::Path) -> Result { + Ok(HttpResponse::build(StatusCode::OK)) +} + #[actix_web::main] // or #[tokio::main] async fn main() -> std::io::Result<()> { HttpServer::new(|| { - App::new().service(greet).service(img_gen) + App::new() + .service(greet) + .service(img_gen0) + .service(img_gen1) }) .bind(("127.0.0.1", 8080))? .run() -- 2.34.1