#!/usr/local/bin/perl
#
# The contents of this file are subject to the Netscape Public License
# Version 1.0 (the "NPL"); you may not use this file except in
# compliance with the NPL.  You may obtain a copy of the NPL at
# http://www.mozilla.org/NPL/
#
# Software distributed under the NPL is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
# for the specific language governing rights and limitations under the
# NPL.
#
# The Initial Developer of this code under the NPL is Netscape
# Communications Corporation.  Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation.  All Rights
# Reserved.

# reducePalette
# Steve Lamm <slamm@netscape.com>
#
# Streamline colormap usage by re-aligning colors
# that are close to one another.  
#
# This requires the netpbm image utilities.
#
# Usage:  reducePalette <image1> [<image2> ..]
#

foreach $giffile ( @ARGV ) {
    if ($#ARGV > 0) {
	print STDERR "$0: reducing $giffile\n";
    }

    ($dirpart, $filebase) = $giffile =~ m|(.*/)([^/]*).gif$|;
    $tempppm = "${dirpart}tmp$$.$filebase.ppm";
    $tempgif = "${dirpart}tmp$$.$filebase.gif";
    $temptrans = "${dirpart}tmp$$.$filebase.trans.gif";

    system("giftopnm < $giffile > $tempppm");

    if ($? != 0) {
	unlink $tempppm;
	exit 0;
    }
    system("ppmtogif < $tempppm > $tempgif");

    unlink $tempppm;

    if ($? != 0) {
	unlink $tempgif;
	exit 0;
    }
    system("giftrans -t\"#ff00ff\" -g \"#7F7F7F=#808080\"< $tempgif > $temptrans");

    unlink $tempgif;

    if ($? != 0) {
	unlink $temptrans;
	exit 0;
    } else {
	open(diff,"diff $temptrans $giffile |")
	    || die "Unable to diff file $temptrans and $giffile";
	$foundDiff = 0;
	while (<diff>) {
	    $foundDiff = 1;
	}
	if ($foundDiff) {
	    rename($temptrans, $giffile) 
		|| die "Unable to rename $temptrans to $giffile";
	} else {
	    print STDERR "$0: $giffile already reduced, left unchanged\n";
	    unlink $temptrans;
	}
    }
    1;
}
