#!/usr/bin/env python ############################################################################ # # MODULE: r.blend for GRASS 5.7; based on blend.sh for GRASS 5 # AUTHOR(S): CERL?; updated to GRASS 5.7 by Michael Barton # Converted to Python by Glynn Clements # PURPOSE: To redraw current displayed maps to 24 bit PNG output # COPYRIGHT: (C) 2004 by the GRASS Development Team # # This program is free software under the GNU General Public # License (>=v2). Read the file COPYING that comes with GRASS # for details. # ############################################################################# #%Module #% description: Blends color components of two raster maps by a given ratio. #% keywords: raster #%End #%option #% key: first #% type: string #% gisprompt: old,cell,raster #% description: Name of first raster map for blending #% key_desc : name #% required : yes #%end #%option #% key: second #% type: string #% gisprompt: old,cell,raster #% description: Name of second raster map for blending #% key_desc : name #% required : yes #%end #%option #% key: output #% type: string #% description: Base name for red, green and blue output maps containing the blend #% key_desc : name #% required : yes #%end #%option #% key: percent #% type: integer #% answer: 50 #% options : 1-99 #% description: Percentage weight of first map for color blending #% required : no #%end import sys import os import string import grass def main(): first = options['first'] second = options['second'] output = options['output'] percent = options['percent'] mapset = grass.gisenv()['MAPSET'] if not grass.overwrite(): for ch in ['r','g','b']: map = '%s.%s' % (output, ch) if grass.find_file(map, element = 'cell', mapset = mapset)['file']: grass.fatal("Raster map <%s> already exists." % map) percent = int(percent) perc_inv = 100 - percent frac1 = percent / 100.0 frac2 = perc_inv / 100.0 grass.message("Calculating the three component maps...") template = string.Template("$output.$$ch = $frac1 * $$ch#$first + $frac2 * $$ch#$second") s = template.substitute(output = output, first = first, second = second, frac1 = frac1, frac2 = frac2) template = string.Template(s) cmd = [] for ch in ['r','g','b']: map = "%s.%s" % (output, ch) cmd.append(template.substitute(ch = ch)) grass.run_command('r.mapcalc', expression = ';'.join(cmd)) for ch in ['r','g','b']: map = "%s.%s" % (output, ch) grass.run_command('r.colors', map = map, color = 'grey255') grass.run_command('r.support', map = map, title = "Color blend of %s and %s" % (first, second), history="") grass.run_command('r.support', map = map, history = "r.blend %s channel." % ch) grass.run_command('r.support', map = map, history = " %d%% of %s, %d%% of %s" % (percent, first, perc_inv, second)) grass.run_command('r.support', map = map, history = os.environ['CMDLINE']) grass.message("Done. Use the following command to visualize the result:") grass.message("d.rgb r=%s.r g=%s.g b=%s.b" % (output, output, output)) if __name__ == "__main__": options, flags = grass.parser() main()