123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #!/usr/bin/env python3
- ############################################################################
- #
- # 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-2012 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.
- # % keyword: raster
- # % keyword: composite
- # %end
- # %option G_OPT_R_INPUT
- # % key: first
- # % description: Name of first raster map for blending
- # %end
- # %option G_OPT_R_INPUT
- # % key: second
- # % description: Name of second raster map for blending
- # %end
- # %option G_OPT_R_BASENAME_OUTPUT
- # % description: Basename for red, green and blue output raster maps
- # %end
- # %option
- # % key: percent
- # % type: double
- # % answer: 50
- # % options : 0-100
- # % description: Percentage weight of first map for color blending
- # % required : no
- # %end
- # % flag
- # % key: c
- # % description: Combine resulting R,G,B layers into single output map
- # %end
- import os
- import string
- import grass.script as gscript
- def main():
- first = options["first"]
- second = options["second"]
- output = options["output"]
- percent = options["percent"]
- mapset = gscript.gisenv()["MAPSET"]
- if not gscript.overwrite():
- for ch in ["r", "g", "b"]:
- map = "%s.%s" % (output, ch)
- if gscript.find_file(map, element="cell", mapset=mapset)["file"]:
- gscript.fatal(_("Raster map <%s> already exists.") % map)
- percent = float(percent)
- perc_inv = 100.0 - percent
- frac1 = percent / 100.0
- frac2 = perc_inv / 100.0
- gscript.message(_("Calculating the three component maps..."))
- template = string.Template(
- "$$output.$ch = "
- 'if(isnull("$$first"), $ch#"$$second", '
- 'if(isnull("$$second"), $ch#"$$first", '
- '$$frac1 * $ch#"$$first" + '
- '$$frac2 * $ch#"$$second"))'
- )
- cmd = [template.substitute(ch=ch) for ch in ["r", "g", "b"]]
- cmd = ";".join(cmd)
- gscript.mapcalc(
- cmd, output=output, first=first, second=second, frac1=frac1, frac2=frac2
- )
- for ch in ["r", "g", "b"]:
- map = "%s.%s" % (output, ch)
- gscript.run_command("r.colors", map=map, color="grey255")
- gscript.run_command(
- "r.support",
- map=map,
- history="",
- title="Color blend of %s and %s" % (first, second),
- description="generated by r.blend",
- )
- gscript.run_command("r.support", map=map, history="r.blend %s channel." % ch)
- gscript.run_command(
- "r.support",
- map=map,
- history=" %d%% of %s, %d%% of %s" % (percent, first, perc_inv, second),
- )
- gscript.run_command("r.support", map=map, history="")
- gscript.run_command("r.support", map=map, history=os.environ["CMDLINE"])
- if flags["c"]:
- gscript.run_command(
- "r.composite",
- r="%s.r" % output,
- g="%s.g" % output,
- b="%s.b" % output,
- output=output,
- )
- gscript.run_command(
- "r.support",
- map=output,
- history="",
- title="Color blend of %s and %s" % (first, second),
- description="generated by r.blend",
- )
- gscript.run_command(
- "r.support",
- map=output,
- history=" %d%% of %s, %d%% of %s" % (percent, first, perc_inv, second),
- )
- gscript.run_command("r.support", map=output, history="")
- gscript.run_command("r.support", map=output, history=os.environ["CMDLINE"])
- else:
- gscript.message(
- _("Done. Use the following command to visualize " "the result:")
- )
- gscript.message(_("d.rgb r=%s.r g=%s.g b=%s.b") % (output, output, output))
- if __name__ == "__main__":
- options, flags = gscript.parser()
- main()
|