projects
/
litoprism.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
6284815
)
Generalize make_png and use it in /gen/4
author
MegaBrutal
<code+git@megabrutal.com>
Fri, 23 Dec 2022 00:45:00 +0000
(
01:45
+0100)
committer
MegaBrutal
<code+git@megabrutal.com>
Fri, 23 Dec 2022 00:45:00 +0000
(
01:45
+0100)
src/main.rs
patch
|
blob
|
history
diff --git
a/src/main.rs
b/src/main.rs
index 4b461b704ba952c742b5a7b9640b3275256fcd77..f6216842de50c5e12f24227466d1184fd2125606 100644
(file)
--- 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<Canvas>, dimension
Ok(canvas_option.insert(f(canvas, percent_decode_str(data).into_iter().borrow_mut())?))
}
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<Item = u8>) -> Result<Cursor<Vec<u8>>, ImageError> {
+fn make_png<F>(dim_x: u32, dim_y: u32, scale: u32, data: &mut dyn Iterator<Item = u8>, encode: F) -> Result<Cursor<Vec<u8>>, ImageError>
+ where F: Fn(RgbImage, &mut dyn Iterator<Item = u8>) -> Result<RgbImage, ImageError>
+{
// Image must not be larger than 1 megapixel
if dim_x * dim_y * scale > 1048576 {
return Err(ImageError::dimension_error())
}
// 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)
}
let cursor = image_to_cursor(img, scale)?;
Ok(cursor)
}
@@
-291,7
+293,7
@@
fn image_to_cursor(img: RgbImage, scale: u32) -> Result<Cursor<Vec<u8>>, ImageEr
#[get("/gen/0/{data}")]
async fn img_gen0(req: HttpRequest) -> Result<impl Responder> {
let data = extract_data!(req, 3);
#[get("/gen/0/{data}")]
async fn img_gen0(req: HttpRequest) -> Result<impl Responder> {
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))
}
Ok(response_image!(cursor))
}
@@
-299,7
+301,7
@@
async fn img_gen0(req: HttpRequest) -> Result<impl Responder> {
async fn img_gen1(req: HttpRequest, path: web::Path<(u32, u32, u32)>) -> Result<impl Responder> {
let (dim_x, dim_y, scale) = path.into_inner();
let data = extract_data!(req, 6);
async fn img_gen1(req: HttpRequest, path: web::Path<(u32, u32, u32)>) -> Result<impl Responder> {
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))
}
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<impl Responder> {
let (dim_x, dim_y, scale) = path.into_inner();
let data = extract_header!(req, "user-agent");
async fn img_gen2(req: HttpRequest, path: web::Path<(u32, u32, u32)>) -> Result<impl Responder> {
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))
}
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 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))
}
Ok(response_image!(cursor))
}