@@ -69,21 +69,33 @@ pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageD
69
69
file_type,
70
70
name,
71
71
} => {
72
+ let Some ( image) = image:: RgbaImage :: from_raw ( width, height, data) else {
73
+ tracing:: error!( "Failed to create image buffer for export" ) ;
74
+ return None ;
75
+ } ;
76
+
72
77
let mut encoded = Vec :: new ( ) ;
78
+ let mut cursor = std:: io:: Cursor :: new ( & mut encoded) ;
73
79
74
80
use graphite_editor:: messages:: frontend:: utility_types:: FileType ;
75
- use image:: ColorType ;
76
- use image:: ImageEncoder ;
81
+ use image:: buffer:: ConvertBuffer ;
77
82
match file_type {
78
83
FileType :: Png => {
79
- let result = image:: codecs:: png:: PngEncoder :: new ( std:: io:: Cursor :: new ( & mut encoded) ) . write_image ( & data, width, height, ColorType :: Rgba8 . into ( ) ) ;
84
+ let result = if transparent {
85
+ image. write_to ( & mut cursor, image:: ImageFormat :: Png )
86
+ // TODO: find out why this is never triggered and fix it
87
+ } else {
88
+ let image: image:: RgbImage = image. convert ( ) ;
89
+ image. write_to ( & mut cursor, image:: ImageFormat :: Png )
90
+ } ;
80
91
if let Err ( err) = result {
81
92
tracing:: error!( "Failed to encode PNG: {err}" ) ;
82
93
return None ;
83
94
}
84
95
}
85
96
FileType :: Jpg => {
86
- let result = image:: codecs:: jpeg:: JpegEncoder :: new ( std:: io:: Cursor :: new ( & mut encoded) ) . write_image ( & data, width, height, ColorType :: Rgba8 . into ( ) ) ;
97
+ let image: image:: RgbImage = image. convert ( ) ;
98
+ let result = image. write_to ( & mut cursor, image:: ImageFormat :: Jpeg ) ;
87
99
if let Err ( err) = result {
88
100
tracing:: error!( "Failed to encode JPG: {err}" ) ;
89
101
return None ;
@@ -106,8 +118,6 @@ pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageD
106
118
format ! ( "{name}.{file_extension}" )
107
119
} ;
108
120
109
- println ! ( "Successfully encoded image, size: {} bytes" , encoded. len( ) ) ;
110
-
111
121
dispatcher. respond ( DesktopFrontendMessage :: SaveFileDialog {
112
122
title : "Export" . to_string ( ) ,
113
123
default_filename,
0 commit comments