#!/usr/bin/perl

use strict;
use warnings;
use File::Temp qw/tempdir/;
use File::Spec::Functions;
use File::Copy;

=pod

Preprocessor for enblend masks.  Transfers white areas in each mask
(indicating pixels to keep) as black areas in other masks.  Areas to
be blended need to be indicated as shades of grey.

Pass mask tif files as program arguments, originals are renamed and
replaced by processed files.

Requires ImageMagick.

October 2006, Bruno Postle <bruno AT postle.net>
2006-10-20 mask threshold mask as well

This software is distributed under the same terms as enblend itself.

=cut

my $tempdir = tempdir (CLEANUP => 1);

my $maskdir = catfile ($tempdir, 'mask');
my $pushdir = catfile ($tempdir, 'push');
my $workdir = catfile ($tempdir, 'work');

mkdir $maskdir;
mkdir $pushdir;
mkdir $workdir;

for my $file (@ARGV)
{
    my $maskdir_file = catfile ($maskdir, $file);
    my $pushdir_file = catfile ($pushdir, $file);
    my $workdir_file = catfile ($workdir, $file);
    `convert -threshold 99% $file $maskdir_file`;
    `convert -negate $maskdir_file $pushdir_file`;
    copy ($file, $workdir_file);
}

for my $file (@ARGV)
{
    my $tempdir_file = catfile ($tempdir, $file);
    my $workdir_file = catfile ($workdir, $file);

    for my $temp (@ARGV)
    {
        next if ($temp eq $file);
        my $pushdir_temp = catfile ($pushdir, $temp);
        my $maskdir_temp = catfile ($maskdir, $temp);
        `composite $pushdir_temp $workdir_file $maskdir_temp $tempdir_file`;
        move ($tempdir_file, $workdir_file);
    }

    move ($file, "$file.bak.tif");
    move ($workdir_file, $file);
}

