#!/usr/bin/perl use strict; use warnings; die "syntax: farbverlauf.pl anzahl startfarbe endfarbe\n" unless 3 == @ARGV; my @color = farbverlauf(@ARGV); print '[color=', $_, ']', $_, '[/color]', "\n" for @color; exit; sub farbverlauf { my ($n, $von, $bis) = @_; my ($f1, $f2, $f3) = $von =~ /^#?([0-9abcdef]{2})([0-9abcdef]{2})([0-9abcdef]{2})$/i; my ($f4, $f5, $f6) = $bis =~ /^#?([0-9abcdef]{2})([0-9abcdef]{2})([0-9abcdef]{2})$/i; my $ar = hex $f1; # Anfangsfarbwerte my $ag = hex $f2; my $ab = hex $f3; my $zr = hex $f4; # Endfarbwerte my $zg = hex $f5; my $zb = hex $f6; my $dr = ($zr-$ar) / ($n-1); # Deltawerte my $dg = ($zg-$ag) / ($n-1); my $db = ($zb-$ab) / ($n-1); #print "ar=$ar\tag=$ag\tab=$ab\n", # "zr=$zr\tzg=$zg\tzb=$zb\n", # "dr=$dr\tdg=$dg\tdb=$db\n"; my $r = $ar; my $g = $ag; my $b = $ab; my @ergebnis; for my $i (1 .. $n) { my $rr = int $r+.5; my $gg = int $g+.5; my $bb = int $b+.5; push @ergebnis, sprintf "#%02X%02X%02X", $rr, $gg, $bb; $r += $dr; $g += $dg; $b += $db; } return @ergebnis; } # sub farbverlauf