@@ -27,6 +27,11 @@ class SpritesheetExporter:
2727 start : int
2828 end : int
2929
30+ pad_left : int
31+ pad_top : int
32+ pad_right : int
33+ pad_bottom : int
34+
3035 export_frame_sequence : bool
3136 custom_frames_dir : Optional [Path ]
3237 base_name : str
@@ -172,8 +177,11 @@ def _copy_frames(self, src: Document, dest: Document):
172177 """
173178
174179 root = dest .rootNode ()
175- width = src .width ()
176- height = src .height ()
180+
181+ x = - self .pad_left
182+ y = - self .pad_top
183+ w = src .width () - x + self .pad_right
184+ h = src .height () - y + self .pad_bottom
177185
178186 pixel_set : Optional [set [QByteArray ]] = set () if self .unique_frames else None
179187
@@ -185,14 +193,16 @@ def _copy_frames(self, src: Document, dest: Document):
185193
186194 # Export each visible layer
187195 for i , layer in enumerate (visible_layers ):
196+ pixel_data = layer .pixelData (x , y , w , h )
197+
188198 if pixel_set is not None :
189- pixel_data = layer .pixelData (0 , 0 , width , height )
190199 if pixel_data in pixel_set :
191200 continue # Got a non-unique frame
192201 pixel_set .add (pixel_data )
193202
194- clone_layer = dest .createCloneLayer (str (i ), layer )
195- root .addChildNode (clone_layer , None )
203+ new_layer = dest .createNode (str (i ), "paintlayer" )
204+ new_layer .setPixelData (0 , 0 , w , h , pixel_data )
205+ root .addChildNode (new_layer , None )
196206 else :
197207 if self .end == DEFAULT_TIME or self .start == DEFAULT_TIME :
198208 self ._set_frame_times (src )
@@ -206,15 +216,15 @@ def _copy_frames(self, src: Document, dest: Document):
206216
207217 # Ensure the time has been set before copying the pixel data
208218 src .waitForDone ()
209- pixel_data = src .pixelData (0 , 0 , width , height )
219+ pixel_data = src .pixelData (x , y , w , h )
210220
211221 if pixel_set is not None :
212222 if pixel_data in pixel_set :
213223 continue # Got a non-unique frame
214224 pixel_set .add (pixel_data )
215225
216226 layer = dest .createNode (str (i ), "paintlayer" )
217- layer .setPixelData (pixel_data , 0 , 0 , width , height )
227+ layer .setPixelData (pixel_data , 0 , 0 , w , h )
218228 root .addChildNode (layer , None )
219229
220230 src .setCurrentTime (initial_time ) # reset time
@@ -228,8 +238,8 @@ def _process_frames(self, src: Document, dest: Document):
228238 @param dest The document to contain the exported spritesheet
229239 """
230240
231- width = src .width ()
232- height = src .height ()
241+ width = src .width () + self . pad_left + self . pad_right
242+ height = src .height () + self . pad_top + self . pad_bottom
233243
234244 frames_dir = self ._make_frames_dir () if self .export_frame_sequence else None
235245 texture_atlas = {"frames" : []} if self .write_texture_atlas else None
@@ -287,8 +297,8 @@ def export(self, debug=False):
287297 print ("spritesheetExporter: Export spritesheet start." )
288298
289299 # Current document info to use for the new document
290- width = doc .width ()
291- height = doc .height ()
300+ width = doc .width () + self . pad_left + self . pad_right
301+ height = doc .height () + self . pad_top + self . pad_bottom
292302
293303 if debug :
294304 print (
0 commit comments