@@ -8,29 +8,34 @@ fn map_image_err(err: ImageError) -> String {
88 format ! ( "Image processing error: {}" , err)
99}
1010
11- fn convert ( image_data : Vec < u8 > , output : ImageFormat ) -> Result < Vec < u8 > , String > {
11+ fn convert ( image_data : Vec < u8 > , input : ImageFormat , output : ImageFormat ) -> Result < Vec < u8 > , String > {
1212 report_progress ( "Loading image..." ) ;
13- let img = image:: load_from_memory ( & image_data) . map_err ( map_image_err) ?;
13+ let img = image:: load_from_memory_with_format ( & image_data, input ) . map_err ( map_image_err) ?;
1414 let mut output_data: Vec < u8 > = Vec :: new ( ) ;
1515 report_progress ( "Converting to new format..." ) ;
1616 img. write_to ( & mut Cursor :: new ( & mut output_data) , output) . map_err ( map_image_err) ?;
1717 report_progress ( "Completed conversion." ) ;
1818 Ok ( output_data)
1919}
2020
21+ fn str_to_type ( s : & str ) -> Option < ImageFormat > {
22+ match s. to_lowercase ( ) . as_str ( ) {
23+ "png" => Some ( ImageFormat :: Png ) ,
24+ "jpeg" | "jpg" => Some ( ImageFormat :: Jpeg ) ,
25+ "gif" => Some ( ImageFormat :: Gif ) ,
26+ "bmp" => Some ( ImageFormat :: Bmp ) ,
27+ "ico" => Some ( ImageFormat :: Ico ) ,
28+ "tiff" => Some ( ImageFormat :: Tiff ) ,
29+ "webp" => Some ( ImageFormat :: WebP ) ,
30+ _ => None ,
31+ }
32+ }
33+
2134#[ wasm_bindgen]
22- pub fn convert_exposed ( image_data : Vec < u8 > , output : String ) -> Result < Vec < u8 > , String > {
23- let output = match output. to_lowercase ( ) . as_str ( ) {
24- "png" => ImageFormat :: Png ,
25- "jpeg" | "jpg" => ImageFormat :: Jpeg ,
26- "gif" => ImageFormat :: Gif ,
27- "bmp" => ImageFormat :: Bmp ,
28- "ico" => ImageFormat :: Ico ,
29- "tiff" => ImageFormat :: Tiff ,
30- "webp" => ImageFormat :: WebP ,
31- _ => return Err ( "Unsupported output format" . to_string ( ) ) ,
32- } ;
33- convert ( image_data, output)
35+ pub fn convert_exposed ( image_data : Vec < u8 > , input : String , output : String ) -> Result < Vec < u8 > , String > {
36+ let input = str_to_type ( & input) . ok_or_else ( || format ! ( "Unsupported input format: {}" , input) ) ?;
37+ let output = str_to_type ( & output) . ok_or_else ( || format ! ( "Unsupported output format: {}" , output) ) ?;
38+ convert ( image_data, input, output)
3439}
3540
3641fn report_progress ( message : & str ) {
0 commit comments