#!/usr/bin/env python # -*- coding: utf-8 -*- #Copyright (C) 2008 Snake Arsenic #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 2 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, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA from gimpfu import * def merge_visible_with_layer_mask(img, drw): for layer in img.layers: if layer.mask == drw: drw = layer # Check if layer has either an alpha channel or a mask. if drw.has_alpha != 0: pass elif drw.layer.mask != "none": return img.undo_group_start() # Transfer mask and alpha channel twice to gather all the transparency to make sure its transferred as a whole drw.remove_mask(MASK_APPLY) permamask = drw.create_mask(ADD_ALPHA_TRANSFER_MASK) drw.add_mask(permamask) drw.remove_mask(MASK_APPLY) # Now all the transparency is in the layer alpha channel and easy to select pdb.gimp_selection_layer_alpha(drw) permamask = drw.create_mask(ADD_ALPHA_TRANSFER_MASK) drw.add_mask(permamask) # Discard mask because the transparency of selected layer should not be affected drw.remove_mask(MASK_DISCARD) # Merge layers and add a mask from the selection. merged_layer = pdb.gimp_image_merge_visible_layers(img, EXPAND_AS_NECESSARY) permamask = merged_layer.create_mask(ADD_SELECTION_MASK) merged_layer.add_mask(permamask) pdb.gimp_selection_none(img) img.undo_group_end() register( "merge_visible_with_layer_mask", "Merge visible using the active layer transparency to create a mask, visible layers below are discarded", "Merge visible using the active layer transparency to create a mask, visible layers below are discarded", "Snake-Arsenic", "Snake-Arsenic", "2008", "/Image/Merge Visible with Layer Mask & Alpha", "*", [], [], merge_visible_with_layer_mask) main()