From 0ab64534f3b47b42a67db15f5e47a118034e8e2e Mon Sep 17 00:00:00 2001 From: giraffedata Date: Fri, 18 Aug 2023 19:08:02 +0000 Subject: cleanup git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@4596 9d0c8265-081b-0410-96cb-a4ca84ce46f8 --- editor/ppmfade | 433 +++++++++++++++++++++++++++++++++------------------------ 1 file changed, 255 insertions(+), 178 deletions(-) (limited to 'editor') diff --git a/editor/ppmfade b/editor/ppmfade index 7896eb87..d96553d2 100755 --- a/editor/ppmfade +++ b/editor/ppmfade @@ -43,6 +43,14 @@ use strict; use File::Temp; +# +# Define a couple linear ramps. +# +# We don't use element 0 of these arrays. +my @spline10 = (0, 0, 0.11, 0.22, 0.33, 0.44, 0.55, 0.66, 0.77, 0.88, 1.0); +my @spline20 = (0, 0, 0.05, 0.11, 0.16, 0.21, 0.26, 0.32, 0.37, 0.42, 0.47, + 0.53, 0.58, 0.63, 0.69, 0.74, 0.79, 0.84, 0.89, 0.95, 1.0); + sub doVersionHack($) { my ($argvR) = @_; @@ -151,6 +159,252 @@ sub imageDimensions($$) { +sub spreadOne($) { + my ($frameNum) = @_; + + if ($frameNum <= 10) { + my $n = $spline20[$frameNum] * 100; + system("ppmspread $n $tmpdir/first.ppm >$tmpdir/this.ppm"); + } elsif ($frameNum <= 20) { + my $n; + $n = $spline20[$frameNum] * 100; + system("ppmspread $n $tmpdir/first.ppm >$tmpdir/junk1a.ppm"); + $n = (1-$spline20[$frameNum-10]) * 100; + system("ppmspread $n $tmpdir/last.ppm >$tmpdir/junk2a.ppm"); + $n = $spline10[$frameNum-10]; + system("ppmmix $n $tmpdir/junk1a.ppm $tmpdir/junk2a.ppm " . + ">$tmpdir/this.ppm"); + } else { + my $n = (1-$spline20[$frameNum-10])*100; + system("ppmspread $n $tmpdir/last.ppm >$tmpdir/this.ppm"); + } +} + + + +sub shiftOne($) { + my ($frameNum) = @_; + + if ($frameNum <= 10) { + my $n = $spline20[$frameNum] * 100; + system("ppmshift $n $tmpdir/first.ppm >$tmpdir/this.ppm"); + } elsif ($frameNum <= 20) { + my $n; + $n = $spline20[$frameNum] * 100; + system("ppmshift $n $tmpdir/first.ppm >$tmpdir/junk1a.ppm"); + $n = (1-$spline20[$frameNum-10])*100; + system("ppmshift $n last.ppm >junk2a.ppm"); + $n = $spline10[$frameNum-10]; + system("ppmmix $n junk1a.ppm junk2a.ppm >this.ppm"); + } else { + my $n = (1-$spline20[$frameNum-10]) * 100; + system("ppmshift $n last.ppm >this.ppm"); + } +} + + + +sub reliefOne($) { + my ($frameNum) = @_; + + if ($frameNum == 1) { + system("ppmrelief first.ppm >junk1r.ppm"); + } + if ($frameNum <= 10) { + my $n = $spline10[$frameNum]; + system("ppmmix $n first.ppm junk1r.ppm >this.ppm"); + } elsif ($frameNum <= 20) { + my $n = $spline10[$frameNum-10]; + system("ppmmix $n junk1r.ppm junk2r.ppm >this.ppm"); + } else { + my $n = $spline10[$frameNum-20]; + system("ppmmix $n junk2r.ppm last.ppm >this.ppm"); + } + if ($frameNum == 10) { + system("ppmrelief last.ppm >junk2r.ppm"); + } +} + + + +sub oilOne($) { + my ($frameNum) = @_; + + if ($frameNum == 1) { + system("ppmtopgm first.ppm | pgmoil >junko.ppm"); + system("rgb3toppm junko.ppm junko.ppm junko.ppm " . + ">junk1o.ppm"); + } + if ($frameNum <= 10) { + my $n = $spline10[$frameNum]; + system("ppmmix $n first.ppm junk1o.ppm >this.ppm"); + } elsif ($frameNum <= 20) { + my $n = $spline10[$frameNum-10]; + system("ppmmix $n junk1o.ppm junk2o.ppm >this.ppm"); + } else { + my $n = $spline10[$frameNum-20]; + system("ppmmix $n junk2o.ppm last.ppm >this.ppm"); + } + if ($frameNum == 10) { + system("ppmtopgm last.ppm | pgmoil >junko.ppm"); + system("rgb3toppm junko.ppm junko.ppm junko.ppm " . + ">junk2o.ppm"); + } +} + + + +sub edgeOne($) { + my ($frameNum) = @_; + + if ($frameNum == 1) { + system("ppmtopgm first.ppm | pgmedge >junko.ppm"); + system("rgb3toppm junko.ppm junko.ppm junko.ppm " . + ">junk1o.ppm"); + } + if ($frameNum <= 10) { + my $n = $spline10[$frameNum]; + system("ppmmix $n first.ppm junk1o.ppm >this.ppm"); + } elsif ($frameNum <= 20) { + my $n = $spline10[$frameNum-10]; + system("ppmmix $n junk1o.ppm junk2o.ppm >this.ppm"); + } else { + my $n = $spline10[$frameNum-20]; + system("ppmmix $n junk2o.ppm last.ppm >this.ppm"); + } + if ($frameNum == 10) { + system("ppmtopgm last.ppm | pgmedge >junko.ppm"); + system("rgb3toppm junko.ppm junko.ppm junko.ppm " . + ">junk2o.ppm"); + } +} + + + +sub bentleyOne($) { + my ($frameNum) = @_; + + if ($frameNum == 1) { + system("ppmtopgm first.ppm | pgmbentley >junko.ppm"); + system("rgb3toppm junko.ppm junko.ppm junko.ppm " . + ">junk1o.ppm"); + } + if ($frameNum <= 10) { + my $n = $spline10[$frameNum]; + system("ppmmix $n first.ppm junk1o.ppm >this.ppm"); + } elsif ($frameNum <= 20) { + my $n = $spline10[$frameNum-10]; + system("ppmmix $n junk1o.ppm junk2o.ppm >this.ppm"); + } else { + my $n = $spline10[$frameNum-20]; + system("ppmmix $n $tmpdir/junk2o.ppm $tmpdir/last.ppm " . + ">$tmpdir/this.ppm"); + } + if ($frameNum == 10) { + system("ppmtopgm $tmpdir/last.ppm | pgmbentley " . + ">$tmpdir/junko.ppm"); + system("rgb3toppm $tmpdir/junko.ppm $tmpdir/junko.ppm " . + "$tmpdir/junko.ppm " . + ">$tmpdir/junk2o.ppm"); + } +} + + + +sub blockOne($$$) { + my ($frameNum, $width, $height) = @_; + + if ($frameNum <= 10) { + my $n = 1 - 1.9*$spline20[$frameNum]; + system("pamscale $n $tmpdir/first.ppm | " . + "pamscale -width $width -height $height " . + ">$tmpdir/this.ppm"); + if ($frameNum == 10) { + system("cp", "$tmpdir/this.ppm", "$tmpdir/junk1a.ppm"); + system("pamscale $n $tmpdir/last.ppm | " . + "pamscale -width $width -height $height " . + ">$tmpdir/junk2a.ppm"); + } + } elsif ($frameNum <= 20) { + my $n = $spline10[$frameNum-10]; + system("ppmmix $n $tmpdir/junk1a.ppm $tmpdir/junk2a.ppm " . + ">$tmpdir/this.ppm"); + } else { + my $n = 1 - 1.9*$spline20[31-$frameNum]; + system("pamscale $n $tmpdir/last.ppm | " . + "pamscale -width $width -height $height " . + ">$tmpdir/this.ppm"); + } +} + + + +sub mixOne($$) { + my ($frameNum, $nFrame) = @_; + + my $fadeFactor = sqrt(1/($nFrame - $frameNum + 1)); + + system("ppmmix $fadeFactor $tmpdir/first.ppm $tmpdir/last.ppm " . + ">$tmpdir/this.ppm"); +} + + + +sub fade($$$$$) { + my ($nFrame, $mode, $width, $height, $baseNm) = @_; +#----------------------------------------------------------------------------- +# Do the fade starting, from image "first.ppm" in the temporary direct +# $tmpdir and ending up at "last.ppm", creating $nFrame frames, including +# the first and last. +# +# Make the outputs $width by $height. +# +# Name the result files $baseNm.NNNN.ppm. +#----------------------------------------------------------------------------- + + # Here's what our temporary files are: + # first.ppm: The original (fade-from) image + # last.ppm: The target (fade-from) image + # this.ppm: The frame of the fade for the current iteration of the + # the for loop. + # junk1a.ppm: If the fade involves a ppmmix sequence from one + # intermediate image to another, this is the first frame + # of that sequence. + # junk2a.ppm: This is the last frame of the above-mentioned + # ppmmix sequence + + my $frameNum; # Frame number + for ($frameNum = 1; $frameNum <= $nFrame; ++$frameNum) { + + print("Creating Frame $frameNum of $nFrame...\n"); + + if ($mode eq 'SPREAD') { + spreadOne($frameNum); + } elsif ($mode eq 'SHIFT') { + shiftOne($frameNum); + } elsif ($mode eq 'RELIEF') { + reliefOne($frameNum); + } elsif ($mode eq 'OIL') { + oilOne($frameNum); + } elsif ($mode eq 'EDGE') { + edgeOne($frameNum); + } elsif ($mode eq 'BENTLEY') { + bentleyOne($frameNum); + } elsif ($mode eq 'BLOCK') { + blockOne($frameNum, $width, $height); + } elsif ($mode eq 'MIX') { + mixOne($frameNum, $nFrame); + } else { + print("INTERNAL ERROR: impossible mode value '$mode'\n"); + } + + my $outFileNm = sprintf("%s.%04d.ppm", $baseNm, $frameNum); + system("cp", "$tmpdir/this.ppm", $outFileNm); + } +} + + + #----------------------------------------------------------------------------- # MAINLINE #----------------------------------------------------------------------------- @@ -173,16 +427,6 @@ if (defined($lastFileNm) && !-e($lastFileNm)) { exit 20; } -# -# Define a couple linear ramps. -# -# We don't use element 0 of these arrays. -my @spline10 = (0, 0, 0.11, 0.22, 0.33, 0.44, 0.55, 0.66, 0.77, 0.88, 1.0); -my @spline20 = (0, 0, 0.05, 0.11, 0.16, 0.21, 0.26, 0.32, 0.37, 0.42, 0.47, - 0.53, 0.58, 0.63, 0.69, 0.74, 0.79, 0.84, 0.89, 0.95, 1.0); - - - my ($width, $height) = imageDimensions($firstFileNm, $lastFileNm); # width and height of our frames in pixels @@ -206,173 +450,6 @@ if (!defined($lastFileNm)) { print("Fading from $fromDesc to $toDesc\n"); -# -# Perform the fade. -# - -# Here's what our temporary files are: -# first.ppm: The original (fade-from) image -# last.ppm: The target (fade-from) image -# this.ppm: The frame of the fade for the current iteration of the -# the for loop. -# junk1a.ppm: If the fade involves a ppmmix sequence from one intermediate -# image to another, this is the first frame of that -# sequence. -# junk2a.ppm: This is the last frame of the above-mentioned ppmmix sequence - -my $i; # Frame number -for ($i = 1; $i <= $nFrame; ++$i) { - - print("Creating Frame $i of $nFrame...\n"); - - if ($mode eq 'SPREAD') { - if ($i <= 10) { - my $n = $spline20[$i] * 100; - system("ppmspread $n $tmpdir/first.ppm >$tmpdir/this.ppm"); - } elsif ($i <= 20) { - my $n; - $n = $spline20[$i] * 100; - system("ppmspread $n $tmpdir/first.ppm >$tmpdir/junk1a.ppm"); - $n = (1-$spline20[$i-10]) * 100; - system("ppmspread $n $tmpdir/last.ppm >$tmpdir/junk2a.ppm"); - $n = $spline10[$i-10]; - system("ppmmix $n $tmpdir/junk1a.ppm $tmpdir/junk2a.ppm " . - ">$tmpdir/this.ppm"); - } else { - my $n = (1-$spline20[$i-10])*100; - system("ppmspread $n $tmpdir/last.ppm >$tmpdir/this.ppm"); - } - } elsif ($mode eq 'SHIFT') { - if ($i <= 10) { - my $n = $spline20[$i] * 100; - system("ppmshift $n $tmpdir/first.ppm >$tmpdir/this.ppm"); - } elsif ($i <= 20) { - my $n; - $n = $spline20[$i] * 100; - system("ppmshift $n $tmpdir/first.ppm >$tmpdir/junk1a.ppm"); - $n = (1-$spline20[$i-10])*100; - system("ppmshift $n last.ppm >junk2a.ppm"); - $n = $spline10[$i-10]; - system("ppmmix $n junk1a.ppm junk2a.ppm >this.ppm"); - } else { - my $n = (1-$spline20[$i-10]) * 100; - system("ppmshift $n last.ppm >this.ppm"); - } - } elsif ($mode eq 'RELIEF') { - if ($i == 1) { - system("ppmrelief first.ppm >junk1r.ppm"); - } - if ($i <= 10) { - my $n = $spline10[$i]; - system("ppmmix $n first.ppm junk1r.ppm >this.ppm"); - } elsif ($i <= 20) { - my $n = $spline10[$i-10]; - system("ppmmix $n junk1r.ppm junk2r.ppm >this.ppm"); - } else { - my $n = $spline10[$i-20]; - system("ppmmix $n junk2r.ppm last.ppm >this.ppm"); - } - if ($i == 10) { - system("ppmrelief last.ppm >junk2r.ppm"); - } - } elsif ($mode eq 'OIL') { - if ($i == 1) { - system("ppmtopgm first.ppm | pgmoil >junko.ppm"); - system("rgb3toppm junko.ppm junko.ppm junko.ppm " . - ">junk1o.ppm"); - } - if ($i <= 10) { - my $n = $spline10[$i]; - system("ppmmix $n first.ppm junk1o.ppm >this.ppm"); - } elsif ($i <= 20) { - my $n = $spline10[$i-10]; - system("ppmmix $n junk1o.ppm junk2o.ppm >this.ppm"); - } else { - my $n = $spline10[$i-20]; - system("ppmmix $n junk2o.ppm last.ppm >this.ppm"); - } - if ($i == 10) { - system("ppmtopgm last.ppm | pgmoil >junko.ppm"); - system("rgb3toppm junko.ppm junko.ppm junko.ppm " . - ">junk2o.ppm"); - } - } elsif ($mode eq 'EDGE') { - if ($i == 1) { - system("ppmtopgm first.ppm | pgmedge >junko.ppm"); - system("rgb3toppm junko.ppm junko.ppm junko.ppm " . - ">junk1o.ppm"); - } - if ($i <= 10) { - my $n = $spline10[$i]; - system("ppmmix $n first.ppm junk1o.ppm >this.ppm"); - } elsif ($i <= 20) { - my $n = $spline10[$i-10]; - system("ppmmix $n junk1o.ppm junk2o.ppm >this.ppm"); - } else { - my $n = $spline10[$i-20]; - system("ppmmix $n junk2o.ppm last.ppm >this.ppm"); - } - if ($i == 10) { - system("ppmtopgm last.ppm | pgmedge >junko.ppm"); - system("rgb3toppm junko.ppm junko.ppm junko.ppm " . - ">junk2o.ppm"); - } - } elsif ($mode eq 'BENTLEY') { - if ($i == 1) { - system("ppmtopgm first.ppm | pgmbentley >junko.ppm"); - system("rgb3toppm junko.ppm junko.ppm junko.ppm " . - ">junk1o.ppm"); - } - if ($i <= 10) { - my $n = $spline10[$i]; - system("ppmmix $n first.ppm junk1o.ppm >this.ppm"); - } elsif ($i <= 20) { - my $n = $spline10[$i-10]; - system("ppmmix $n junk1o.ppm junk2o.ppm >this.ppm"); - } else { - my $n = $spline10[$i-20]; - system("ppmmix $n $tmpdir/junk2o.ppm $tmpdir/last.ppm " . - ">$tmpdir/this.ppm"); - } - if ($i == 10) { - system("ppmtopgm $tmpdir/last.ppm | pgmbentley " . - ">$tmpdir/junko.ppm"); - system("rgb3toppm $tmpdir/junko.ppm $tmpdir/junko.ppm " . - "$tmpdir/junko.ppm " . - ">$tmpdir/junk2o.ppm"); - } - } elsif ($mode eq 'BLOCK') { - if ($i <= 10) { - my $n = 1 - 1.9*$spline20[$i]; - system("pamscale $n $tmpdir/first.ppm | " . - "pamscale -width $width -height $height " . - ">$tmpdir/this.ppm"); - if ($i == 10) { - system("cp", "$tmpdir/this.ppm", "$tmpdir/junk1a.ppm"); - system("pamscale $n $tmpdir/last.ppm | " . - "pamscale -width $width -height $height " . - ">$tmpdir/junk2a.ppm"); - } - } elsif ($i <= 20) { - my $n = $spline10[$i-10]; - system("ppmmix $n $tmpdir/junk1a.ppm $tmpdir/junk2a.ppm " . - ">$tmpdir/this.ppm"); - } else { - my $n = 1 - 1.9*$spline20[31-$i]; - system("pamscale $n $tmpdir/last.ppm | " . - "pamscale -width $width -height $height " . - ">$tmpdir/this.ppm"); - } - } elsif ($mode eq 'MIX') { - my $fadeFactor = sqrt(1/($nFrame-$i+1)); - system("ppmmix $fadeFactor $tmpdir/first.ppm $tmpdir/last.ppm " . - ">$tmpdir/this.ppm"); - } else { - print("INTERNAL ERROR: impossible mode value '$mode'\n"); - } - - my $outFileNm = sprintf("%s.%04d.ppm", $baseNm, $i); - system("cp", "$tmpdir/this.ppm", $outFileNm); -} +fade($nFrame, $mode, $width, $height, $baseNm); exit(0); -- cgit 1.4.1