feat: stroke_color options
This commit is contained in:
parent
aeed04688b
commit
4968a907dd
1 changed files with 23 additions and 11 deletions
34
src/main.rs
34
src/main.rs
|
@ -54,9 +54,11 @@ fn main() {
|
||||||
GET /icons/[icon].svg - Get an icon in SVG format (equivalent to fetching them directly from Lucide)
|
GET /icons/[icon].svg - Get an icon in SVG format (equivalent to fetching them directly from Lucide)
|
||||||
GET /icons/[icon].png - Get an icon rendered in PNG format
|
GET /icons/[icon].png - Get an icon rendered in PNG format
|
||||||
Query parameters:
|
Query parameters:
|
||||||
|
-- note: Make sure to URL encode the query parameters: particularly special characters such as # (e.g. %23). The server only accepts a small subset of characters deemed necessary for the query parameters.
|
||||||
scale - integer - Scale the icon (default: 1, min: 1, max: 100)
|
scale - integer - Scale the icon (default: 1, min: 1, max: 100)
|
||||||
padding - integer - Add padding (px) around the icon (default: 0, min: 0, max: 100)
|
padding - integer - Add padding (px) around the icon (default: 0, min: 0, max: 100)
|
||||||
background - hex - Set the background color in hex w/o the hashtag (e.g. FFFFFF) (default: transparent)
|
background - hex - Set the background color in hex WITHOUT the hashtag (e.g. FFFFFF) (default: transparent)
|
||||||
|
stroke_color - string - Set the stroke color for the SVG icon, any CSS color WITH the hashtag (default: currentColor)
|
||||||
discord_compatibility - boolean - Set padding to 8px for Discord compatibility. Typically for use in embed author icons as these have a circle clip applied by Discord. Overrides padding if set. (default: false)
|
discord_compatibility - boolean - Set padding to 8px for Discord compatibility. Typically for use in embed author icons as these have a circle clip applied by Discord. Overrides padding if set. (default: false)
|
||||||
cache_key - string - Technically this can have any name. The server does not interpret this at all. Useful for cache busting. (default: none)
|
cache_key - string - Technically this can have any name. The server does not interpret this at all. Useful for cache busting. (default: none)
|
||||||
Example:
|
Example:
|
||||||
|
@ -123,7 +125,7 @@ fn main() {
|
||||||
return Response::new(req, 404, Body::Static("Icon Not Found"));
|
return Response::new(req, 404, Body::Static("Icon Not Found"));
|
||||||
}
|
}
|
||||||
|
|
||||||
let icon = match icons.get_icon(icon_name) {
|
let mut icon_string = match icons.get_icon_string(icon_name) {
|
||||||
Some(icon) => icon,
|
Some(icon) => icon,
|
||||||
None => {
|
None => {
|
||||||
error("Failed to read icon");
|
error("Failed to read icon");
|
||||||
|
@ -131,14 +133,6 @@ fn main() {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
let tree = match usvg::Tree::from_data(&icon, &usvg::Options::default()) {
|
|
||||||
Ok(tree) => tree,
|
|
||||||
Err(e) => {
|
|
||||||
error(&format!("Failed to load icon into tree: {}", e));
|
|
||||||
return Response::new(req, 500, Body::Static("Failed to load icon into tree"))
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Options handling
|
// Options handling
|
||||||
let mut scale = 1;
|
let mut scale = 1;
|
||||||
match req.url.query.get("scale") {
|
match req.url.query.get("scale") {
|
||||||
|
@ -186,7 +180,7 @@ fn main() {
|
||||||
match u32::from_str_radix(&background_str, 16) {
|
match u32::from_str_radix(&background_str, 16) {
|
||||||
Ok(background_val) => {
|
Ok(background_val) => {
|
||||||
if background_val > 0xFFFFFF {
|
if background_val > 0xFFFFFF {
|
||||||
return Response::new(req, 400, Body::Static("Invalid background value. Background value must be a valid hex color 000000 - FFFFFF"));
|
return Response::new(req, 400, Body::Static("Invalid background value. Background value must be a valid hex color #000000 - #FFFFFF"));
|
||||||
}
|
}
|
||||||
let red = ((background_val >> 16) & 0xFF) as u8;
|
let red = ((background_val >> 16) & 0xFF) as u8;
|
||||||
let green = ((background_val >> 8) & 0xFF) as u8;
|
let green = ((background_val >> 8) & 0xFF) as u8;
|
||||||
|
@ -199,6 +193,24 @@ fn main() {
|
||||||
None => {}
|
None => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut svg_stroke = "currentColor";
|
||||||
|
match req.url.query.get("stroke_color") {
|
||||||
|
Some(svg_stroke_str) => svg_stroke = svg_stroke_str,
|
||||||
|
None => {}
|
||||||
|
}
|
||||||
|
|
||||||
|
icon_string = icon_string.replace("currentColor", &svg_stroke);
|
||||||
|
|
||||||
|
// Rendering
|
||||||
|
let tree = match usvg::Tree::from_str(&icon_string, &usvg::Options::default()) {
|
||||||
|
Ok(tree) => tree,
|
||||||
|
Err(e) => {
|
||||||
|
error(&format!("Failed to load icon into tree: {}", e));
|
||||||
|
return Response::new(req, 500, Body::Static("Failed to load icon into tree"))
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
let length = 24 * scale + padding;
|
let length = 24 * scale + padding;
|
||||||
|
|
||||||
let mut pixmap = match Pixmap::new(length, length) {
|
let mut pixmap = match Pixmap::new(length, length) {
|
||||||
|
|
Loading…
Reference in a new issue