Pi66

walrs
pywal but if its Fast-Minimal-Simple
git clone https://git.pi66.xyz/walrs

← back to log

add support for non-JPEG image formats

author: pixel
date: 2025-03-21 11:15
hash: 7c5608c71eddaa4fad3e5a74d952714733a7b37c

Diffstat:

M

src/get_colors.rs
19 ++++++++++++++++++++++++------
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
diff --git a/src/get_colors.rs b/src/get_colors.rs
index a71b0a3..1d85e4a 100644
--- a/src/get_colors.rs
+++ b/src/get_colors.rs
@@ -3,7 +3,7 @@ use image;
 use palette_extract::{MaxColors, Quality,};
 use std::collections::HashSet;
 use std::process::exit;
-use std::u8;
+use std::fs::read;
 use crate::utils::warning;

 fn adjust_rgb(r: u8, g: u8, b: u8, brightness: i16, saturation: i16) -> (u8, u8, u8) {
@@ -37,10 +37,21 @@ fn generate_variation(color: (u8, u8, u8), offset: i16) -> (u8, u8, u8) {
 }

 pub fn get_colors(image_path: &str,send:bool) -> (Vec<(u8,u8,u8)>,u8){
-    let image = match image::open(image_path){
-        Ok(v) => v,
-        Err(_) => {warning("Image", "Unsupported or corrupted image format",send);exit(1)},
+
+    let image = match image::open(image_path) {
+        Ok(img) => img,
+        Err(_) => {
+            let data = read(image_path).unwrap();
+            match image::guess_format(&data) {
+                Ok(fmt) => image::load_from_memory_with_format(&data, fmt).unwrap(),
+                Err(_) => {
+                    warning("Image", "Unsupported or corrupted image format", send);
+                    exit(1);
+                }
+            }
+        }
     };
+
     let native_rgba = image.to_rgba8();
     let alpha = &native_rgba.get_pixel(0, 0)[3];
     let mut collect_rgb:Vec<(u8,u8,u8)> = Vec::new();