From a2798aed737c3aeb4a6a669d6c9f67cd6b13ee5e Mon Sep 17 00:00:00 2001 From: UncertainProd Date: Wed, 15 Sep 2021 15:18:38 +0530 Subject: [PATCH] Image sequence thing done --- src/xmlpngUI.py | 14 +++++++++++++- src/xmlpngengine.py | 20 +++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/xmlpngUI.py b/src/xmlpngUI.py index 21f6df9..6c94205 100644 --- a/src/xmlpngUI.py +++ b/src/xmlpngUI.py @@ -33,7 +33,7 @@ def __init__(self): self.ui.generatexml_btn.clicked.connect(self.generate_xml) self.ui.actionExport_as_Spritesheet_and_XML.triggered.connect(self.generate_xml) - # self.ui.actionExport_induvidual_images.triggered.connect() + self.ui.actionExport_induvidual_images.triggered.connect(self.export_bunch_of_imgs) self.ui.frames_area.setWidgetResizable(True) self.frames_layout = QGridLayout(self.ui.sprite_frame_content) self.ui.frames_area.setWidget(self.ui.sprite_frame_content) @@ -264,6 +264,18 @@ def re_render_grid(self): self.frames_layout.removeWidget(self.add_img_button) self.frames_layout.addWidget(self.add_img_button, self.num_labels // self.num_cols, self.num_labels % self.num_cols, Qt.AlignmentFlag(0x1|0x20)) + def export_bunch_of_imgs(self): + savedir = QFileDialog.getExistingDirectory(caption="Save image sequence to...") + updatefn, progbar = display_progress_bar(self, "Exporting Image Sequence", startlim=0, endlim=len(self.labels)) + QApplication.processEvents() + + errmsg = xmlpngengine.save_img_sequence(self.labels, savedir, updatefn, self.settings_widget.isclip != 0) + progbar.close() + if errmsg: + self.display_msg_box("Error!", text=f"An error occured: {errmsg}", icon=QMessageBox.Critical) + else: + self.display_msg_box("Success!", text="Image sequence saved successfully!", icon=QMessageBox.Information) + def generate_xml(self): charname = self.ui.charname_textbox.text() charname = charname.strip() diff --git a/src/xmlpngengine.py b/src/xmlpngengine.py index bdd0634..8cc5e4f 100644 --- a/src/xmlpngengine.py +++ b/src/xmlpngengine.py @@ -403,6 +403,24 @@ def appendIconToIconGrid(icongrid_path, iconpaths, iconsize=150): # savedir, icongrid.close() return retval, indices, problem_img, exception_msg +def save_img_sequence(frames, savedir, updatefn, clip): + newposes = add_pose_numbers(frames) + for i, (frame, pose) in enumerate(zip(frames, newposes)): + try: + if frame.from_single_png: + im = Image.open(frame.imgpath).convert('RGBA') + else: + im = Image.open(frame.imgpath).convert('RGBA').crop((frame.tex_x, frame.tex_y, frame.tex_x + frame.tex_w, frame.tex_y + frame.tex_h)) + + if clip: + im = im.crop(im.getbbox()) + im.save(path.join(savedir, f"{pose}.png")) + im.close() + updatefn(i+1, f"{pose}.png") + except Exception as e: + return str(e) + return None + def split_spsh(pngpath, xmlpath, udpdatefn): spritesheet = Image.open(pngpath) try: @@ -425,7 +443,7 @@ def split_spsh(pngpath, xmlpath, udpdatefn): cleaned_xml += ch xmltree = ET.fromstring(cleaned_xml) # ET.parse(xmlpath) - print(xmltree) + print("XML cleaned") except ET.ParseError as e: print("Error!", str(e)) return []