From 47bcf2089eb390e72cf26958073367e2570f75af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20F=2E=20Sch=C3=B6nitzer?= Date: Mon, 4 Nov 2013 20:31:08 +0100 Subject: [PATCH 01/10] export all layers instead of only the active --- save-export-clean.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/save-export-clean.py b/save-export-clean.py index e3d42ca..063634d 100755 --- a/save-export-clean.py +++ b/save-export-clean.py @@ -42,7 +42,10 @@ def python_export_clean(img, drawable) : img.filename = filename chooser.destroy() - pdb.gimp_file_save(img, drawable, filename, filename) + exportimg = pdb.gimp_image_duplicate(img) + layer = pdb.gimp_image_merge_visible_layers(exportimg, CLIP_TO_IMAGE) + + pdb.gimp_file_save(exportimg, layer, filename, filename) pdb.gimp_image_clean_all(img) def choose_likely_save_dir() : From cdf183705ba1641871a10395646d383db03bd1b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20F=2E=20Sch=C3=B6nitzer?= Date: Mon, 4 Nov 2013 22:38:15 +0100 Subject: [PATCH 02/10] new plug-in: export image with '-mod'-appended to the original name --- save-mod.py | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100755 save-mod.py diff --git a/save-mod.py b/save-mod.py new file mode 100755 index 0000000..740eb42 --- /dev/null +++ b/save-mod.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python + +# Copyright 2013 by Michael Schönitzer, Akkana Peck +# You may use and distribute this plug-in under the terms of the GPL v2 +# or, at your option, any later GPL version. + +from gimpfu import * +import gtk +import os +import collections + +def python_savemod_clean(img, drawable) : + filename = img.filename + + # If the file has no filename yet, ask user + if not filename : + chooser = gtk.FileChooserDialog(title=None, + action=gtk.FILE_CHOOSER_ACTION_SAVE, + buttons=(gtk.STOCK_CANCEL, + gtk.RESPONSE_CANCEL, + gtk.STOCK_OPEN, + gtk.RESPONSE_OK)) + # Might want to set a current folder: + save_dir = choose_likely_save_dir() + if save_dir : + chooser.set_current_folder(save_dir) + + response = chooser.run() + if response != gtk.RESPONSE_OK: + return + + filename = chooser.get_filename() + img.filename = filename + chooser.destroy() + # Otherwise we appand a string to the filename + else: + # We don't want to save it in xcf format + if os.path.splitext(filename)[1] == ".xcf" : + filename = os.path.splitext(filename)[0] + ".png" + + filenamewoext = os.path.splitext(filename)[0] # filename without extension + filenameext = os.path.splitext(filename)[1] # filenameextension + if filenamewoext[-4:] != "-mod": + filename = filenamewoext + "-mod" + filenameext + else: + filename = filenamewoext + "2" + filenameext + + # We want to save all layers, + # so first duplicate the picture, then merge all layers + exportimg = pdb.gimp_image_duplicate(img) + layer = pdb.gimp_image_merge_visible_layers(exportimg, CLIP_TO_IMAGE) + + # save file and unset the 'unsaved'-flag + pdb.gimp_file_save(exportimg, layer, filename, filename) + pdb.gimp_image_clean_all(img) + img.filename = filename + +# Guess the save directory +def choose_likely_save_dir() : + counts = collections.Counter() + for img in gimp.image_list() : + if img.filename : + counts[os.path.dirname(img.filename)] += 1 + + try : + return counts.most_common(1)[0][0] + except : + return None + +register( + "python_fu_savemod_clean", + "Save current image with mod extension, then mark it clean.", + "Save current image with mod extension, then mark it clean.", + "Michael Schoenitzer, Akkana Peck", + "Michael Schoenitzer, Akkana Peck", + "2013", + "Save with -mod & clean", + "*", + [ + (PF_IMAGE, "image", "Input image", None), + (PF_DRAWABLE, "drawable", "Input drawable", None), + ], + [], + python_savemod_clean, + menu = "/File/Save/" +) + +main() + From 9d993f7552e8fb6d8ff0ae793347f439d64dfc9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20F=2E=20Sch=C3=B6nitzer?= Date: Sun, 10 Nov 2013 17:38:00 +0100 Subject: [PATCH 03/10] added first version of plugin to upload images to WikimediaCommons --- upload2commons.py | 156 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100755 upload2commons.py diff --git a/upload2commons.py b/upload2commons.py new file mode 100755 index 0000000..89d4d06 --- /dev/null +++ b/upload2commons.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright 2013 by Michael Schönitzer, other +# You may use and distribute this plug-in under the terms of the GPL v3 +# or, at your option, any later GPL version. +#ToDo: +#- 'progressbar' +#- Success-Dialog +#- remember Usr/Pw +#- Lisence-Chooser +#- Cat +#- i18n + +from gimpfu import * +import gtk +import os +import collections +import wikitools + +DEFAULT_WIKITEXT = '''{{Information +|Description={{en|}} +{{de| }} +|Source= +|Date= +|Author= +|Permission= +|other_versions= +}} + +{{PD-old-100}} + +[[Category:]]''' +WIKI_URL = "https://commons.wikimedia.org/w/api.php" + +class MyWindow(gtk.Dialog): + + def __init__(self, parent=None): + gtk.Dialog.__init__(self, "Upload2Commons", parent, 0, + (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, + gtk.STOCK_OK, gtk.RESPONSE_OK)) + + table = gtk.Table(2,2, True) + + self.set_default_size(150, 100) + box = self.get_content_area() + box.set_homogeneous(False) + box.set_spacing(False) + box.add(table) + + self.usr_label = gtk.Label("User-Name:\t") + self.usr_entry = gtk.Entry() + table.attach(self.usr_label, 0,1,0,1) + table.attach(self.usr_entry, 1, 2, 0, 1) + + self.pw_label = gtk.Label("Password:\t") + self.pw_entry = gtk.Entry() + self.pw_entry.set_visibility(False) + table.attach(self.pw_label, 0,1,1,2) + table.attach(self.pw_entry, 1,2,1,2) + + self.filename_entry = gtk.Entry() + self.filename_entry.set_text("Filename") + box.add(self.filename_entry) + + self.textview = gtk.TextView() + self.textbuffer = self.textview.get_buffer() + self.textview.set_wrap_mode(gtk.WRAP_WORD_CHAR) + self.textbuffer.set_text(DEFAULT_WIKITEXT) + box.add(self.textview) + + self.show_all() + + +def python_savemod_clean(img, drawable) : + use_tempfile=False + + if pdb.gimp_image_is_dirty(img) or not img.filename: + ### save file in temporary file ### + use_tempfile=True + file = tempfile.mkstemp(prefix='gimp_upload2commons') + local_file_name = file[1] + fd = file[0] + exportimg = pdb.gimp_image_duplicate(img) + layer = pdb.gimp_image_merge_visible_layers(exportimg, CLIP_TO_IMAGE) + pdb.gimp_file_save(exportimg, layer, local_file_name, local_file_name) + else: + local_file_name = img.filename + + ### Open Dialog ### + dialog = MyWindow() + response = dialog.run() + if response != gtk.RESPONSE_OK: + return + + wiki_username = dialog.usr_entry.get_text() + wiki_password = dialog.pw_entry.get_text() + + if wiki_username == "" or wiki_password == "": + print("No ursername or password given") + return + + remote_file_name = dialog.filename_entry.get_text() + wikitext = dialog.textbuffer.get_text(dialog.textbuffer.get_bounds()[0], dialog.textbuffer.get_bounds()[1]) + comment = wikitext + + print(wikitext) + + ### Upload ### + try: + wiki = wikitools.wiki.Wiki(WIKI_URL) + except: + print "Can not connect to wiki. Check the URL" + + try: + wiki.login(username=wiki_username,password=wiki_password) + except: + print "Invalid Username or Password" + + image=open(local_file_name,"r") + picture=wikitools.wikifile.File(wiki=wiki, title=remote_file_name) + print("Uploading…") + picture.upload(fileobj=image, comment=comment, ignorewarnings=True) + print("Finished Uploading") + + # not needed – but maybe used in future versions? + #page_name = "File:" + remote_file_name.replace(" ","_") + #page = wikitools.Page(wiki, page_name, followRedir=True, watch=True) + #page.edit(text=wikitext) + + if use_tempfile: + os.close(fd) + os.remove(local_file_name) + + +### register Plugin ### +register( + "python_fu_upload2commons", + "Upload the Image to Wikimedia Commons.", + "Upload the Image to Wikimedia Commons.", + "Michael Schoenitzer", + "Michael Schoenitzer", + "2013", + "Upload to Commons", + "*", + [ + (PF_IMAGE, "image", "Input image", None), + (PF_DRAWABLE, "drawable", "Input drawable", None), + ], + [], + python_savemod_clean, + menu = "/File/Save/" +) + +main() + From 883fb53f3320aa4f076710a87d3eced361d07184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20F=2E=20Sch=C3=B6nitzer?= Date: Sun, 10 Nov 2013 21:35:09 +0100 Subject: [PATCH 04/10] added licensechooser and category-entry --- upload2commons.py | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/upload2commons.py b/upload2commons.py index 89d4d06..1f57ff8 100755 --- a/upload2commons.py +++ b/upload2commons.py @@ -7,9 +7,8 @@ #ToDo: #- 'progressbar' #- Success-Dialog +#- suggest filename #- remember Usr/Pw -#- Lisence-Chooser -#- Cat #- i18n from gimpfu import * @@ -17,6 +16,7 @@ import os import collections import wikitools +import tempfile DEFAULT_WIKITEXT = '''{{Information |Description={{en|}} @@ -27,10 +27,7 @@ |Permission= |other_versions= }} - -{{PD-old-100}} - -[[Category:]]''' +''' WIKI_URL = "https://commons.wikimedia.org/w/api.php" class MyWindow(gtk.Dialog): @@ -68,7 +65,25 @@ def __init__(self, parent=None): self.textview.set_wrap_mode(gtk.WRAP_WORD_CHAR) self.textbuffer.set_text(DEFAULT_WIKITEXT) box.add(self.textview) - + + + self.license = gtk.combo_box_new_text() + self.license.append_text("{{self|GFDL|cc-by-sa-all|migration=redundant}}") + self.license.append_text("{{self|cc-by-sa-3.0}}") + self.license.append_text("{{self|Cc-zero}}") + self.license.append_text("{{cc-by-sa-3.0}}") + self.license.append_text("{{PD-old-100}}") + self.license.append_text("{{PD-old-70}}") + self.license.append_text("{{PD-Art}}") + box.add(self.license) + + self.cat_box = gtk.HBox() + self.cat_label = gtk.Label("Categories:\t") + self.category_entry = gtk.Entry() + self.cat_box.add(self.cat_label) + self.cat_box.add(self.category_entry) + box.add(self.cat_box) + self.show_all() @@ -78,7 +93,7 @@ def python_savemod_clean(img, drawable) : if pdb.gimp_image_is_dirty(img) or not img.filename: ### save file in temporary file ### use_tempfile=True - file = tempfile.mkstemp(prefix='gimp_upload2commons') + file = tempfile.mkstemp(prefix='gimp_upload2commons-', suffix=".jpg") local_file_name = file[1] fd = file[0] exportimg = pdb.gimp_image_duplicate(img) @@ -101,10 +116,15 @@ def python_savemod_clean(img, drawable) : return remote_file_name = dialog.filename_entry.get_text() - wikitext = dialog.textbuffer.get_text(dialog.textbuffer.get_bounds()[0], dialog.textbuffer.get_bounds()[1]) + wikitext = dialog.textbuffer.get_text(dialog.textbuffer.get_bounds()[0], + dialog.textbuffer.get_bounds()[1]) + wikitext += "\n" + dialog.license.get_active_text() + "\n" + for cat in dialog.category_entry.get_text().split('|'): + wikitext += "\n[[Category:" + cat + "]]" comment = wikitext print(wikitext) + return ### Upload ### try: From a39d4d95c1a4483fc26eb615305b04c02f93a3ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20F=2E=20Sch=C3=B6nitzer?= Date: Sun, 10 Nov 2013 21:36:41 +0100 Subject: [PATCH 05/10] added encoding-information --- save-mod.py | 1 + 1 file changed, 1 insertion(+) diff --git a/save-mod.py b/save-mod.py index 740eb42..3a53ad1 100755 --- a/save-mod.py +++ b/save-mod.py @@ -1,4 +1,5 @@ #!/usr/bin/env python +# -*- coding: utf-8 -*- # Copyright 2013 by Michael Schönitzer, Akkana Peck # You may use and distribute this plug-in under the terms of the GPL v2 From e53c372b498077bea8f910deec4f0feb8746a78e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20F=2E=20Sch=C3=B6nitzer?= Date: Mon, 17 Feb 2014 23:16:30 +0100 Subject: [PATCH 06/10] - suggest filename - smaller improvements --- upload2commons.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/upload2commons.py b/upload2commons.py index 1f57ff8..9de5d38 100755 --- a/upload2commons.py +++ b/upload2commons.py @@ -7,7 +7,6 @@ #ToDo: #- 'progressbar' #- Success-Dialog -#- suggest filename #- remember Usr/Pw #- i18n @@ -17,6 +16,7 @@ import collections import wikitools import tempfile +import time DEFAULT_WIKITEXT = '''{{Information |Description={{en|}} @@ -32,10 +32,12 @@ class MyWindow(gtk.Dialog): - def __init__(self, parent=None): + def __init__(self, parent=None, filename="Filename.jpg"): gtk.Dialog.__init__(self, "Upload2Commons", parent, 0, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, gtk.RESPONSE_OK)) + if not filename: + filename="Filename.jpg" table = gtk.Table(2,2, True) @@ -57,7 +59,7 @@ def __init__(self, parent=None): table.attach(self.pw_entry, 1,2,1,2) self.filename_entry = gtk.Entry() - self.filename_entry.set_text("Filename") + self.filename_entry.set_text(filename) box.add(self.filename_entry) self.textview = gtk.TextView() @@ -87,7 +89,7 @@ def __init__(self, parent=None): self.show_all() -def python_savemod_clean(img, drawable) : +def python_upload2commons(img, drawable) : use_tempfile=False if pdb.gimp_image_is_dirty(img) or not img.filename: @@ -103,7 +105,7 @@ def python_savemod_clean(img, drawable) : local_file_name = img.filename ### Open Dialog ### - dialog = MyWindow() + dialog = MyWindow(filename=os.path.basename(img.filename)) response = dialog.run() if response != gtk.RESPONSE_OK: return @@ -121,10 +123,10 @@ def python_savemod_clean(img, drawable) : wikitext += "\n" + dialog.license.get_active_text() + "\n" for cat in dialog.category_entry.get_text().split('|'): wikitext += "\n[[Category:" + cat + "]]" - comment = wikitext + comment = "File uploaded from Gimp by upload2commons" print(wikitext) - return + #return ## For debugging! ### Upload ### try: @@ -135,6 +137,7 @@ def python_savemod_clean(img, drawable) : try: wiki.login(username=wiki_username,password=wiki_password) except: + # TODO: GUI print "Invalid Username or Password" image=open(local_file_name,"r") @@ -143,9 +146,8 @@ def python_savemod_clean(img, drawable) : picture.upload(fileobj=image, comment=comment, ignorewarnings=True) print("Finished Uploading") - # not needed – but maybe used in future versions? - #page_name = "File:" + remote_file_name.replace(" ","_") - #page = wikitools.Page(wiki, page_name, followRedir=True, watch=True) + page_name = "File:" + remote_file_name.replace(" ","_") + page = wikitools.Page(wiki, page_name, followRedir=True, watch=True) #page.edit(text=wikitext) if use_tempfile: @@ -168,7 +170,7 @@ def python_savemod_clean(img, drawable) : (PF_DRAWABLE, "drawable", "Input drawable", None), ], [], - python_savemod_clean, + python_upload2commons, menu = "/File/Save/" ) From 71cb906765cbdc7dae8b9f79cfe61b60a2598957 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20F=2E=20Sch=C3=B6nitzer?= Date: Sat, 18 Oct 2014 17:44:20 +0200 Subject: [PATCH 07/10] number of the attachement is incremented now --- save-mod.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/save-mod.py b/save-mod.py index 3a53ad1..bc36ad6 100755 --- a/save-mod.py +++ b/save-mod.py @@ -9,6 +9,7 @@ import gtk import os import collections +import re def python_savemod_clean(img, drawable) : filename = img.filename @@ -41,10 +42,16 @@ def python_savemod_clean(img, drawable) : filenamewoext = os.path.splitext(filename)[0] # filename without extension filenameext = os.path.splitext(filename)[1] # filenameextension - if filenamewoext[-4:] != "-mod": + # ToDo: Improve, so that mor than 9 versions are possible + # Add -mod-attachement to filename + if not re.search('-mod[0-9]?$' , filenamewoext): filename = filenamewoext + "-mod" + filenameext - else: + elif re.search('-mod$' , filenamewoext): filename = filenamewoext + "2" + filenameext + # Increment number of the -mod-attachement + else: + num = int(filenamewoext[-1]) + 1 + filename = filenamewoext[0:-1] + str(num) + filenameext # We want to save all layers, # so first duplicate the picture, then merge all layers From ab8441c7ba3634f5996829e24f65668d48ff10c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20F=2E=20Sch=C3=B6nitzer?= Date: Sat, 28 Nov 2015 19:52:41 +0100 Subject: [PATCH 08/10] add new plugin: triple-USM --- upload2commons.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/upload2commons.py b/upload2commons.py index 9de5d38..30050f8 100755 --- a/upload2commons.py +++ b/upload2commons.py @@ -86,7 +86,15 @@ def __init__(self, parent=None, filename="Filename.jpg"): self.cat_box.add(self.category_entry) box.add(self.cat_box) + self.feedbackbox = gtk.HBox() + box.add(self.feedbackbox) + self.spinner = gtk.Spinner() + self.show_all() + + def startspinner(self): + self.feedbackbox.add(self.spinner) + self.spinner.start() def python_upload2commons(img, drawable) : @@ -110,6 +118,7 @@ def python_upload2commons(img, drawable) : if response != gtk.RESPONSE_OK: return + dialog.startspinner() wiki_username = dialog.usr_entry.get_text() wiki_password = dialog.pw_entry.get_text() @@ -140,10 +149,13 @@ def python_upload2commons(img, drawable) : # TODO: GUI print "Invalid Username or Password" + exit + image=open(local_file_name,"r") picture=wikitools.wikifile.File(wiki=wiki, title=remote_file_name) print("Uploading…") - picture.upload(fileobj=image, comment=comment, ignorewarnings=True) + #picture.upload(fileobj=image, comment=comment, ignorewarnings=True) + time.sleep(6) print("Finished Uploading") page_name = "File:" + remote_file_name.replace(" ","_") From 07a2024792e99cc145d9c630ef432b3db97f4439 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20F=2E=20Sch=C3=B6nitzer?= Date: Sat, 28 Nov 2015 19:52:41 +0100 Subject: [PATCH 09/10] add spinner --- upload2commons.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/upload2commons.py b/upload2commons.py index 9de5d38..30050f8 100755 --- a/upload2commons.py +++ b/upload2commons.py @@ -86,7 +86,15 @@ def __init__(self, parent=None, filename="Filename.jpg"): self.cat_box.add(self.category_entry) box.add(self.cat_box) + self.feedbackbox = gtk.HBox() + box.add(self.feedbackbox) + self.spinner = gtk.Spinner() + self.show_all() + + def startspinner(self): + self.feedbackbox.add(self.spinner) + self.spinner.start() def python_upload2commons(img, drawable) : @@ -110,6 +118,7 @@ def python_upload2commons(img, drawable) : if response != gtk.RESPONSE_OK: return + dialog.startspinner() wiki_username = dialog.usr_entry.get_text() wiki_password = dialog.pw_entry.get_text() @@ -140,10 +149,13 @@ def python_upload2commons(img, drawable) : # TODO: GUI print "Invalid Username or Password" + exit + image=open(local_file_name,"r") picture=wikitools.wikifile.File(wiki=wiki, title=remote_file_name) print("Uploading…") - picture.upload(fileobj=image, comment=comment, ignorewarnings=True) + #picture.upload(fileobj=image, comment=comment, ignorewarnings=True) + time.sleep(6) print("Finished Uploading") page_name = "File:" + remote_file_name.replace(" ","_") From eacba8fa2b077d25fd31677f986791d35a942abd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20F=2E=20Sch=C3=B6nitzer?= Date: Sat, 28 Nov 2015 19:58:57 +0100 Subject: [PATCH 10/10] add new plugin: triple-USM --- tripusm.py | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100755 tripusm.py diff --git a/tripusm.py b/tripusm.py new file mode 100755 index 0000000..b9da733 --- /dev/null +++ b/tripusm.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python + +# Performes tree times a unsharp-mask wiht diffrent stengths and sizes + +# Copyright 2015 by Michael F. Schoenitzer +# You may use and distribute this plug-in under the terms of the GPL v2 +# or, at your option, any later GPL version. + +from gimpfu import * +import gtk +import os +import collections + +class MyWindow(gtk.Dialog): + + def __init__(self, parent=None, filename="Filename.jpg"): + gtk.Dialog.__init__(self, "Triple USM", parent, 0, + (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, + gtk.STOCK_OK, gtk.RESPONSE_OK)) + if not filename: + filename="Filename.jpg" + + table = gtk.Table(4,2, True) + + self.set_default_size(150, 100) + box = self.get_content_area() + box.set_homogeneous(False) + box.set_spacing(False) + box.add(table) + + self.size_label = gtk.Label("Size") + self.strength_label = gtk.Label("Strength") + + table.attach(self.size_label, 0,1,0,1) + table.attach(self.strength_label, 1, 2, 0, 1) + + size1 = gtk.Adjustment(value=10, lower=0, upper=100, step_incr=0.1, page_incr=0, page_size=0) + strength1 = gtk.Adjustment(value=0.20, lower=0, upper=100, step_incr=0.01, page_incr=0, page_size=0) + self.size1 = gtk.SpinButton(size1, digits=2) + self.strength1 = gtk.SpinButton(strength1, digits=2) + table.attach(self.size1, 0,1,1,2) + table.attach(self.strength1, 1,2,1,2) + + size2 = gtk.Adjustment(value=10, lower=0, upper=100, step_incr=0.1, page_incr=0, page_size=0) + strength2 = gtk.Adjustment(value=0.20, lower=0, upper=100, step_incr=0.01, page_incr=0, page_size=0) + self.size2 = gtk.SpinButton(size2, digits=2) + self.strength2 = gtk.SpinButton(strength2, digits=2) + self.size2.set_text("10") + self.strength2.set_text("0.20") + table.attach(self.size2, 0,1,2,3) + table.attach(self.strength2, 1,2,2,3) + + size3 = gtk.Adjustment(value=10, lower=0, upper=100, step_incr=0.1, page_incr=0, page_size=0) + strength3 = gtk.Adjustment(value=0.20, lower=0, upper=100, step_incr=0.01, page_incr=0, page_size=0) + self.size3 = gtk.SpinButton(size3, digits=2) + self.strength3 = gtk.SpinButton(strength3, digits=2) + self.size3.set_text("5") + self.strength3.set_text("0.20") + table.attach(self.size3, 0,1,3,4) + table.attach(self.strength3, 1,2,3,4) + + self.show_all() + + +def python_triple_usm(img, drawable) : + dialog = MyWindow(filename=os.path.basename(img.filename)) + response = dialog.run() + if response != gtk.RESPONSE_OK: + return + + + pdb.plug_in_unsharp_mask(img, drawable, dialog.size1.get_text(), dialog.strength1.get_text(), 0) + pdb.plug_in_unsharp_mask(img, drawable, dialog.size2.get_text(), dialog.strength2.get_text(), 0) + pdb.plug_in_unsharp_mask(img, drawable, dialog.size3.get_text(), dialog.strength3.get_text(), 0) + +register( + "python_fu_triple_usm", + "triple Unsharp mask", + "triple Unsharp mask", + "Michael Schoenitzer", + "Michael Schoenitzer", + "2015", + "TripleUSM", + "*", + [ + (PF_IMAGE, "image", "Input image", None), + (PF_DRAWABLE, "drawable", "Input drawable", None), + ], + [], + python_triple_usm, + menu = "/Filters/Enhance" +) + +main() +