Reputation: 68670
I have imagemagick sequence of commands that cleanup a single image step by step:
#! /bin/bash
convert -unsharp 5 "base.jpg" "base.ppm"
convert -opaque white -fill white -fuzz 10% "base.ppm" "image1_step1.tif"
convert -fuzz 5% -fill "#816c51" -opaque "#816c51" "image1_step1.tif" "image1_step2.tif"
convert -fuzz 1.5% -fill "#816c51" -opaque "#5a4a3b" "image1_step2.tif" "image1_step3.tif"
convert -fuzz 12% -fill "black" -opaque "#1c110f" "image1_step3.tif" "image1_step4.tif"
convert image1_step4.tif image1_cleaned.jpg
I'd like to use this script on a couple hundred tif files in a particular folder. I'm not sure how to automate this, I'd really appreciate any help.
Thanks!
Upvotes: 3
Views: 1396
Reputation: 121720
Something like this may do:
#!/bin/bash
VICTIM="$1"
if [ -z "$VICTIM" ]; then
echo >&2 "Syntax: $0 <imagefile>"
exit 1
fi
if [ ! -f "$VICTIM" ]; then
echo >&2 "$VICTIM is not a regular file"
exit 1
fi
VICTIM=$(readlink -f "$VICTIM")
DSTDIR=$(dirname "$VICTIM")
WORKDIR=$(mktemp -d /tmp/.workXXXXXX)
if [ "$?" != "0" ]; then
echo >&2 "Aiie, failed to create temporary directory"
exit 1
fi
export WORKDIR
trap "rm -rf $WORKDIR" exit INT QUIT TERM
(
cd $WORKDIR
convert -unsharp 5 "$VICTIM" step1.ppm && \
convert -opaque white -fill white -fuzz 10% step1.ppm step2.tif && \
convert -fuzz 1.5% -fill "#816c51" -opaque "#5a4a3b" step2.tif step3.tif && \
convert -fuzz 12% -fill "black" -opaque "#1c110f" step3.tif step4.tif
)
if [ "$?" != "0" ]; then
echo >&2 "Aiie, image processing failed"
exit 1
fi
convert $WORKDIR/step4.tif $DSTDIR/CLEANED-$VICTIM
RC=$?
if [ "$RC" != "0" ]; then
echo >&2 "Aiie, final conversion failed"
fi
exit $RC
Name this script "convert_one.sh" and invoke with:
for i in *.jpg; do sh convert_one.sh $i;done
Upvotes: 0
Reputation: 360103
Wrap your convert commands in a for
loop.
#!/bin/bash
dir="/path/to/dir"
cd "$dir"
for file in *.jpg
do
base=${file%*.jpg}
convert ... "$base" "$base.ppm"
convert ... "$base.ppm" "${base}_step1.tif"
# etc
done
Upvotes: 2