#!/usr/bin/env python # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # Dave Lichterman # 2009/11/08 # laviddichterman [AT] gmail [D0T] com # # Change History # 2009/11/08 - Fix menu path. Attempt to handle non-image files # with better messaging. # 2009/11/07 - Tweaked watermark scaling formula. # 2009/10/10 - Original version import os from gimpfu import * RATIO = .015 def determine_padding(width, height, padding): longerdim = max(width, height) return float(padding * longerdim) def watermark_image(image, layer): # add the layer image.add_layer(layer) # scale # TODO: this could probably use some tweaking still. watermark_area = int(RATIO * image.width * image.height) layer.scale(watermark_area / layer.height, watermark_area / layer.width) # place/translate: determine the padding and new location padding = determine_padding(image.width, image.height, .01) new_xloc = int(image.width - layer.width - padding) new_yloc = int(image.height - layer.height - padding) layer.translate(new_xloc, new_yloc) # set difference mode on the layer layer.mode = DIFFERENCE_MODE return image def save_watermark(image, format): filename = image.filename (directory, basename) = os.path.split(filename) (shortname, extension) = os.path.splitext(basename) new_directory = os.path.join(directory, "WM") new_filename = os.path.join(new_directory, shortname + "." + format) if not os.path.isdir(new_directory): os.mkdir(new_directory) drawable = image.flatten() pdb.gimp_file_save(image, drawable, new_filename, new_filename) def pywatermark(path, watermark_file, output_format): if os.path.isdir(path): files=os.listdir(path) files = map(lambda x: os.path.join(path, x), files) else: files=[path] # loop through the images for img in files: if os.path.isdir(img): continue try: # load file image = None try: image = pdb.gimp_file_load(img, img) except: print "skipping %s since it doesn't seem to be an image" % img continue print "processing %s" % img layer = pdb.gimp_file_load_layer(image, watermark_file) # apply the watermark watermark_image(image, layer) save_watermark(image, output_format) print "...[OK]" except RuntimeError, err: print "...[FAIL]" register( "python_fu_watermarker", "Add a watermark to an image", "Help Computer", "Dave Lichterman", "GPL3", "2009.11.08", "/Filters/Batch/_WATERMARK", "", [ (PF_FILE, "image_file", "the file to add the watermark to", None), (PF_FILE, "watermark_file", "the cropped watermark file", None), (PF_STRING, "output_format", "the extension to save the watermarked file", "jpg"), ], [], pywatermark) main()