pjs/cmd/xfe/icons/reducePalette

77 строки
2.0 KiB
Perl
Executable File

#!/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;
}