2020年06月04日 Shell script to convert nega film to posi [長年日記]
_ nega2posi.sh - ネガフィルム画像をポジ画像に変換するシェルスクリプト(のつもり)
#! /bin/sh
trap "rm /tmp/nega2posi.$$.*.tmp.*; exit 1" INT TERM
#
if [ "X$1" = "X-h" -o "X$1" = "X--help" ]
then
echo "Usage: $0 [-b X,Y] [-aw | -w X,Y] [-i input] [-o output]"
echo "Convert input(nega film) to output(posi)."
echo ""
echo "-b X,Y Specify position of black."
echo "-aw Adjust white balance automatically."
echo "-w X,Y Specify position of white and adjust white balance."
echo "-i input If this option is omitted or - is specified, stdin is assumed."
echo "-o output If this option is omitted or - is specified, stdout is assumed."
exit 0
fi
#
AutoWhiteSw="n"
white=""
black=""
input="-"
output="-"
#
while [ $# -ne 0 ]
do
case $1 in
-aw)
AutoWhiteSw="y"
;;
-w)
shift
white=`echo $1 |\
tr ',' '+'`
;;
-b)
shift
black=`echo $1 |\
tr ',' '+'`
;;
-i)
shift
input="$1"
;;
-o)
shift
output="$1"
;;
esac
shift
done
#
if [ "X${black}" = "X" ]
then
convert ${input} txt: >/tmp/nega2posi.$$.3.tmp.txt
darkestXYC=`cat /tmp/nega2posi.$$.3.tmp.txt |\
egrep -v '^#' |\
tr ',:()' ' ' |\
tr -s ' ' |\
awk 'BEGIN{
FS=" ";
}
{
printf("%d %d %d\n",$1,$2,($3+$4+$4));
}
END{
}' |\
sort -t ' ' -k 3,3nr |\
head -1`
x=`echo ${darkestXYC} | cut -d ' ' -f 1`
y=`echo ${darkestXYC} | cut -d ' ' -f 2`
black="${x}+${y}"
fi
#
if [ "X${AutoWhiteSw}" = "Xy" ]
then
if [ ! -r /tmp/nega2posi.$$.3.tmp.txt ]
then
convert ${input} txt: >/tmp/nega2posi.$$.3.tmp.txt
fi
brightestXYC=`cat /tmp/nega2posi.$$.3.tmp.txt |\
egrep -v '^#' |\
tr ',:()' ' ' |\
tr -s ' ' |\
awk 'BEGIN{
FS=" ";
}
{
printf("%d %d %d\n",$1,$2,($3+$4+$4));
}
END{
}' |\
sort -t ' ' -k 3,3n |\
head -1`
x=`echo ${brightestXYC} | cut -d ' ' -f 1`
y=`echo ${brightestXYC} | cut -d ' ' -f 2`
white="${x}+${y}"
fi
#
convert +repage ${input} /tmp/nega2posi.$$.1.tmp.png
size=`convert /tmp/nega2posi.$$.1.tmp.png -format "%wx%h" info:`
convert +repage /tmp/nega2posi.$$.1.tmp.png -crop 1x1+${black} -resize ${size}! -negate -strip /tmp/nega2posi.$$.2.tmp.png
convert +repage /tmp/nega2posi.$$.1.tmp.png /tmp/nega2posi.$$.2.tmp.png \
-compose blend -composite -negate -equalize /tmp/nega2posi.$$.4.tmp.png
# -compose blend -composite -negate -auto-level ${output}
# -compose blend -composite -negate -normalize ${output}
#
if [ "X${white}" = "X" ]
then
convert +repage /tmp/nega2posi.$$.4.tmp.png ${output}
else
convert +repage /tmp/nega2posi.$$.4.tmp.png -crop 1x1+${white} -resize ${size}! -negate -strip /tmp/nega2posi.$$.5.tmp.png
convert +repage /tmp/nega2posi.$$.4.tmp.png /tmp/nega2posi.$$.5.tmp.png \
-compose blend -composite -equalize ${output}
# -compose blend -composite -auto-level ${output}
# -compose blend -composite -normalize ${output}
fi
#
rm /tmp/nega2posi.$$.*.tmp.*
[ツッコミを入れる]