Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

export all layers instead of only the active #5

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
5 changes: 4 additions & 1 deletion save-export-clean.py
Original file line number Diff line number Diff line change
Expand Up @@ -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() :
Expand Down
97 changes: 97 additions & 0 deletions save-mod.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
#!/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
# or, at your option, any later GPL version.

from gimpfu import *
import gtk
import os
import collections
import re

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
# 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
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
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 = "<Image>/File/Save/"
)

main()

95 changes: 95 additions & 0 deletions tripusm.py
Original file line number Diff line number Diff line change
@@ -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 = "<Image>/Filters/Enhance"
)

main()

190 changes: 190 additions & 0 deletions upload2commons.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
#!/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
#- i18n

from gimpfu import *
import gtk
import os
import collections
import wikitools
import tempfile
import time

DEFAULT_WIKITEXT = '''{{Information
|Description={{en|}}
{{de| }}
|Source=
|Date=
|Author=
|Permission=
|other_versions=
}}
'''
WIKI_URL = "https://commons.wikimedia.org/w/api.php"

class MyWindow(gtk.Dialog):

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)

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.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.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) :
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-', suffix=".jpg")
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(filename=os.path.basename(img.filename))
response = dialog.run()
if response != gtk.RESPONSE_OK:
return

dialog.startspinner()
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])
wikitext += "\n" + dialog.license.get_active_text() + "\n"
for cat in dialog.category_entry.get_text().split('|'):
wikitext += "\n[[Category:" + cat + "]]"
comment = "File uploaded from Gimp by upload2commons"

print(wikitext)
#return ## For debugging!

### 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:
# 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)
time.sleep(6)
print("Finished Uploading")

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_upload2commons,
menu = "<Image>/File/Save/"
)

main()