Skip to content

Commit cf4e6cd

Browse files
authored
Merge pull request #73 from nachifur/custom-process-func
user custom func
2 parents 4107c6c + 5d9c7bb commit cf4e6cd

File tree

5 files changed

+224
-77
lines changed

5 files changed

+224
-77
lines changed

src/mulimgviewer/gui/main_gui.fbp

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<property name="internationalize">0</property>
2020
<property name="name">mulimg_viewer</property>
2121
<property name="namespace"></property>
22-
<property name="path">D:\ncfey\Desktop\github\MulimgViewer\gui</property>
22+
<property name="path">D:\ncfey\Desktop\github\MulimgViewer\src\mulimgviewer\gui</property>
2323
<property name="precompiled_header"></property>
2424
<property name="relative_path">1</property>
2525
<property name="skip_lua_events">1</property>
@@ -4377,6 +4377,70 @@
43774377
<property name="window_style"></property>
43784378
</object>
43794379
</object>
4380+
<object class="sizeritem" expanded="1">
4381+
<property name="border">5</property>
4382+
<property name="flag">wxALL</property>
4383+
<property name="proportion">0</property>
4384+
<object class="wxCheckBox" expanded="1">
4385+
<property name="BottomDockable">1</property>
4386+
<property name="LeftDockable">1</property>
4387+
<property name="RightDockable">1</property>
4388+
<property name="TopDockable">1</property>
4389+
<property name="aui_layer"></property>
4390+
<property name="aui_name"></property>
4391+
<property name="aui_position"></property>
4392+
<property name="aui_row"></property>
4393+
<property name="best_size"></property>
4394+
<property name="bg"></property>
4395+
<property name="caption"></property>
4396+
<property name="caption_visible">1</property>
4397+
<property name="center_pane">0</property>
4398+
<property name="checked">0</property>
4399+
<property name="close_button">1</property>
4400+
<property name="context_help"></property>
4401+
<property name="context_menu">1</property>
4402+
<property name="default_pane">0</property>
4403+
<property name="dock">Dock</property>
4404+
<property name="dock_fixed">0</property>
4405+
<property name="docking">Left</property>
4406+
<property name="enabled">1</property>
4407+
<property name="fg"></property>
4408+
<property name="floatable">1</property>
4409+
<property name="font"></property>
4410+
<property name="gripper">0</property>
4411+
<property name="hidden">0</property>
4412+
<property name="id">wxID_ANY</property>
4413+
<property name="label">CustomFunc</property>
4414+
<property name="max_size"></property>
4415+
<property name="maximize_button">0</property>
4416+
<property name="maximum_size"></property>
4417+
<property name="min_size"></property>
4418+
<property name="minimize_button">0</property>
4419+
<property name="minimum_size"></property>
4420+
<property name="moveable">1</property>
4421+
<property name="name">customfunc</property>
4422+
<property name="pane_border">1</property>
4423+
<property name="pane_position"></property>
4424+
<property name="pane_size"></property>
4425+
<property name="permission">protected</property>
4426+
<property name="pin_button">1</property>
4427+
<property name="pos"></property>
4428+
<property name="resize">Resizable</property>
4429+
<property name="show">1</property>
4430+
<property name="size"></property>
4431+
<property name="style"></property>
4432+
<property name="subclass">; ; forward_declare</property>
4433+
<property name="toolbar_pane">0</property>
4434+
<property name="tooltip"></property>
4435+
<property name="validator_data_type"></property>
4436+
<property name="validator_style">wxFILTER_NONE</property>
4437+
<property name="validator_type">wxDefaultValidator</property>
4438+
<property name="validator_variable"></property>
4439+
<property name="window_extra_style"></property>
4440+
<property name="window_name"></property>
4441+
<property name="window_style"></property>
4442+
</object>
4443+
</object>
43804444
</object>
43814445
</object>
43824446
<object class="sizeritem" expanded="0">
@@ -7998,7 +8062,7 @@
79988062
<property name="window_extra_style"></property>
79998063
<property name="window_name"></property>
80008064
<property name="window_style"></property>
8001-
<object class="wxMenu" expanded="0">
8065+
<object class="wxMenu" expanded="1">
80028066
<property name="label">File</property>
80038067
<property name="name">m_menu1</property>
80048068
<property name="permission">protected</property>

src/mulimgviewer/gui/main_gui.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,9 @@ def __init__( self, parent ):
372372
self.onetitle = wx.CheckBox( self.m_panel4, wx.ID_ANY, u"OneTitle", wx.DefaultPosition, wx.DefaultSize, 0 )
373373
wSizer11.Add( self.onetitle, 0, wx.ALL, 5 )
374374

375+
self.customfunc = wx.CheckBox( self.m_panel4, wx.ID_ANY, u"CustomFunc", wx.DefaultPosition, wx.DefaultSize, 0 )
376+
wSizer11.Add( self.customfunc, 0, wx.ALL, 5 )
377+
375378

376379
fgSizer3.Add( wSizer11, 1, wx.EXPAND, 5 )
377380

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from PIL import ImageEnhance
2+
from pathlib import Path
3+
import os
4+
5+
6+
def main(img_list, save_path, name_list=None):
7+
i = 0
8+
out_img_list = []
9+
if save_path!="":
10+
flag_save = True
11+
save_path = Path(save_path)/"custom_func_output"
12+
if not save_path.exists():
13+
os.makedirs(str(save_path))
14+
else:
15+
flag_save = False
16+
17+
for img in img_list:
18+
# custom process img
19+
enh = ImageEnhance.Contrast(img)
20+
img = enh.enhance(2)
21+
##########
22+
23+
out_img_list.append(img)
24+
if flag_save:
25+
if isinstance(name_list, list):
26+
img_path = save_path/name_list[i]
27+
else:
28+
img_path = save_path/(str(i)+".png")
29+
img.save(str(img_path))
30+
i += 1
31+
return out_img_list
32+
33+
# if __name__ == '__main__':
34+
# main()

src/mulimgviewer/src/main.py

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from .index_table import IndexTable
1313
from .utils import MyTestEvent, get_resource_path
1414
from .utils_img import ImgManager
15+
import os
1516

1617

1718
class MulimgViewer (MulimgViewerGui):
@@ -211,9 +212,9 @@ def slider_value_change(self, event):
211212
self.SetStatusText_(["Skip", "-1", "-1", "-1"])
212213

213214
def save_img(self, event):
214-
layout_params = self.set_img_layout()
215-
if layout_params != False:
216-
self.ImgManager.layout_params = layout_params
215+
# layout_params = self.set_img_layout()
216+
# if layout_params != False:
217+
# self.ImgManager.layout_params = layout_params
217218
type_ = self.choice_output.GetSelection()
218219
if self.auto_save_all.Value:
219220
last_count_img = self.ImgManager.action_count
@@ -244,7 +245,6 @@ def save_img(self, event):
244245
except:
245246
pass
246247
flag = self.ImgManager.save_img(self.out_path_str, type_)
247-
self.refresh(event)
248248
if flag == 0:
249249
self.SetStatusText_(
250250
["Save", str(self.ImgManager.action_count), "Save success!", "-1"])
@@ -263,6 +263,9 @@ def save_img(self, event):
263263
elif flag == 4:
264264
self.SetStatusText_(
265265
["-1", str(self.ImgManager.action_count), "***Error: No magnification box, the magnified image can not be saved***", "-1"])
266+
elif flag == 5:
267+
self.SetStatusText_(
268+
["-1", str(self.ImgManager.action_count), "***Error: First, need to select the input dir***", "-1"])
266269
self.SetStatusText_(["Save", "-1", "-1", "-1"])
267270

268271
def refresh(self, event):
@@ -616,7 +619,7 @@ def img_left_move(self, event):
616619
x, y = event.GetPosition()
617620
id = self.get_img_id_from_point([x, y])
618621
xy_grid = self.ImgManager.xy_grid[id]
619-
RGBA = self.ImgManager.img.getpixel((int(x), int(y)))
622+
RGBA = self.show_bmp_in_panel.getpixel((int(x), int(y)))
620623
x = x-xy_grid[0]
621624
y = y-xy_grid[1]
622625
self.m_statusBar1.SetStatusText(str(x)+","+str(y)+"/"+str(RGBA), 0)
@@ -911,10 +914,12 @@ def set_img_layout(self):
911914
0).split(',')
912915
magnifer_resolution = [int(x) for x in magnifer_resolution]
913916

914-
magnifier_show_scale = self.magnifier_show_scale.GetLineText(0).split(',')
917+
magnifier_show_scale = self.magnifier_show_scale.GetLineText(
918+
0).split(',')
915919
magnifier_show_scale = [float(x) for x in magnifier_show_scale]
916920

917-
magnifier_out_scale = self.magnifier_out_scale.GetLineText(0).split(',')
921+
magnifier_out_scale = self.magnifier_out_scale.GetLineText(
922+
0).split(',')
918923
magnifier_out_scale = [float(x) for x in magnifier_out_scale]
919924

920925
if self.checkBox_auto_draw_color.Value:
@@ -987,7 +992,7 @@ def set_img_layout(self):
987992
output_scale, # 5
988993
img_resolution, # 6
989994
1 if self.magnifier.Value else 0, # 7
990-
magnifier_show_scale, # 8
995+
magnifier_show_scale, # 8
991996
color, # 9
992997
line_width, # 10
993998
self.move_file.Value, # 11
@@ -1010,9 +1015,14 @@ def set_img_layout(self):
10101015
magnifer_resolution, # 28
10111016
magnifer_row_col, # 29
10121017
self.onetitle.Value, # 30
1013-
magnifier_out_scale] # 31
1018+
magnifier_out_scale, # 31
1019+
self.customfunc.Value, # 32
1020+
self.out_path_str] # 33
10141021

10151022
def show_img(self):
1023+
if self.customfunc.Value and self.out_path_str == "":
1024+
self.out_path(None)
1025+
self.ImgManager.layout_params[33] = self.out_path_str
10161026
# check layout_params change
10171027
try:
10181028
if self.layout_params_old[0:2] != self.ImgManager.layout_params[0:2] or (self.layout_params_old[19] != self.ImgManager.layout_params[19]):
@@ -1048,10 +1058,19 @@ def show_img(self):
10481058
self.slider_img.SetMax(self.ImgManager.max_action_num-1)
10491059
self.ImgManager.get_flist()
10501060

1061+
# show the output image processed by the custom func; return cat(bmp, processed_bmp)
1062+
if self.customfunc.Value:
1063+
bmp_processed = self.process_by_custom_func()
1064+
else:
1065+
bmp_processed = None
1066+
10511067
flag = self.ImgManager.stitch_images(
10521068
0, copy.deepcopy(self.xy_magnifier))
10531069
if flag == 0:
10541070
bmp = self.ImgManager.img
1071+
if self.customfunc.Value and bmp_processed != None:
1072+
bmp = self.ImgManager.ImgF.cat_img(bmp, bmp_processed)
1073+
self.show_bmp_in_panel = bmp
10551074
self.img_size = bmp.size
10561075
bmp = self.ImgManager.ImgF.PIL2wx(bmp)
10571076

@@ -1097,7 +1116,7 @@ def show_img(self):
10971116
["-1", "-1", "No image is displayed! Check Show original/Show 🔍️/Show title.", "-1"])
10981117
else:
10991118
self.SetStatusText_(
1100-
["-1", "-1", "***Error: no image in this dir! Maybe you can choose parallel mode!***", "-1"])
1119+
["-1", "-1", "***Error: no image in this dir!***", "-1"])
11011120
self.auto_layout()
11021121
self.SetStatusText_(["Stitch", "-1", "-1", "-1"])
11031122

@@ -1168,6 +1187,16 @@ def init_min_size(self):
11681187
self.scrolledWindow_img.SetMinSize(
11691188
wx.Size((50, self.Size[1]-150)))
11701189

1190+
def process_by_custom_func(self):
1191+
flag = self.ImgManager.stitch_images(
1192+
0, copy.deepcopy(self.xy_magnifier))
1193+
bmp_processed = self.ImgManager.img
1194+
self.ImgManager.layout_params[32] = False # customfunc
1195+
if flag == 0:
1196+
return bmp_processed
1197+
else:
1198+
return None
1199+
11711200
def split_sash_pos_changing(self, event):
11721201

11731202
self.init_min_size()
@@ -1263,13 +1292,6 @@ def title_auto_fc(self, event):
12631292
for title in titles:
12641293
title.Enabled = True
12651294

1266-
# def show_scale_change(self, event):
1267-
# self.show_scale_proportion = 0
1268-
# self.refresh(event)
1269-
1270-
# self.show_scale = wx.TextCtrl( self.scrolledWindow_set, wx.ID_ANY, u"1,1", wx.DefaultPosition, wx.Size( 60,-1 ), style=wx.TE_PROCESS_ENTER)
1271-
# wSizer6.Add( self.show_scale, 0, wx.ALL, 5 )
1272-
12731295
def select_img_box_func(self, event):
12741296
if self.select_img_box.Value:
12751297
self.box_id = -1

0 commit comments

Comments
 (0)