From 934fdcc3e9182436aea226e5124c0976c98d68b4 Mon Sep 17 00:00:00 2001 From: Matteo Cypriani Date: Fri, 22 Sep 2017 23:30:51 -0400 Subject: [PATCH] [graphics] Add tiff-batch-convert.sh --- bin/tiff-batch-convert | 1 + graphics/README.md | 44 ++++++++++++++++ graphics/tiff-batch-convert.sh | 96 ++++++++++++++++++++++++++++++++++ 3 files changed, 141 insertions(+) create mode 120000 bin/tiff-batch-convert create mode 100755 graphics/tiff-batch-convert.sh diff --git a/bin/tiff-batch-convert b/bin/tiff-batch-convert new file mode 120000 index 0000000..06ef8ee --- /dev/null +++ b/bin/tiff-batch-convert @@ -0,0 +1 @@ +../graphics/tiff-batch-convert.sh \ No newline at end of file diff --git a/graphics/README.md b/graphics/README.md index 8eda36a..1378137 100644 --- a/graphics/README.md +++ b/graphics/README.md @@ -12,3 +12,47 @@ EXIF information is manipulated using exiftool, shipped with the Image is rotated using ImageMagick's `convert`. **Warning**: no backup of the original file is made! + + +tiff-batch-convert.sh +=============== + +`tiff-batch-convert.sh` converts TIFF images to another format of your choice, +such as JPEG. + +Use case: you have a bunch of albums that you scanned to TIFF to preserve +quality, with a good resolution, each album being in its own directory. But +TIFFs are big; you want to generate compressed versions of the albums, possibly +down-scalling the images, to share on the Internet or copy them to your +smartphone. + +Usage: + + tiff-batch-convert.sh [ALBUM2 [...]] + +`` is the base directory in which the converted albums will be +stored; each album will be in a separate sub-folder + +For example, this will convert every album under +`$HOME/Pictures/my_albums_tiff` and store the result under +`/mnt/usb0/my_albums_lowres` (supposedly a USB drive): + + tiff-batch-convert.sh /mnt/usb0/my_albums_lowres $HOME/Pictures/my_albums_tiff/* + +Limitations and bugs: + +- Existing destination files will be **OVERWRITEN WITHOUT WARNING**! +- Input files must have the extention `.tiff` (lowercase), not `.tif`. +- The albums provided on the command-line must contain TIFF images directly; + sub-folders won't be searched. +- Similarly, the full hierarchy of the input albums is *not* preserved: each + album will be generated as a subfolder of ``, even if the + original albums are stored in different places. It is easy to modify this + behaviour in the script if needed. +- To change the quality settings or the output format, you will have to edit + the script (see the `USER CONFIGURATION` section of the script). + +Dependencies: + +- `convert` from ImageMagick (pkgsrc: ImageMagick, Debian: imagemagick) +- `tiffinfo` from libtiff (pkgsrc: tiff, Debian: libtiff-tools) diff --git a/graphics/tiff-batch-convert.sh b/graphics/tiff-batch-convert.sh new file mode 100755 index 0000000..972753c --- /dev/null +++ b/graphics/tiff-batch-convert.sh @@ -0,0 +1,96 @@ +#!/bin/sh +# +# tiff-batch-convert.sh, Copyright © 2017 Matteo Cypriani +# +# This program is free software. It comes without any warranty, to the extent +# permitted by applicable law. You can redistribute it and/or modify it under +# the terms of the Do What The Fuck You Want To Public License, Version 2, as +# published by Sam Hocevar. See http://sam.zoy.org/wtfpl/COPYING for more +# details. +# +# This script batch-converts TIFF images to another format of your choice. +# +# Dependencies: +# - convert from ImageMagick +# - tiffinfo from libtiff + +set -e +#set -x + +###################### +# USER CONFIGURATION # +###################### + +# Format to convert the TIFF images to (lowercase) +FORMAT="jpg" + +# Resolution of the converted pictures: low, medium or high. +# Use "high" for no rescaling. The actual size of the pictures for "low" and +# "medium" depends on the next two options below. +QUALITY="medium" + +# Maximum size of the pictures for the "low" quality setting. +LOW_SCALE="800x800" + +# Maximum size of the pictures for the "medium" quality setting. +MEDIUM_SCALE="2000x2000" + +############################# +# END OF USER CONFIGURATION # +############################# + +# Should the pictures be resized, depending on the quality setting? +if [ "$QUALITY" = "low" ] ; then + SCALE_OPT="-scale $LOW_SCALE" +elif [ "$QUALITY" = "medium" ] ; then + SCALE_OPT="-scale $MEDIUM_SCALE" +elif [ "$QUALITY" = "high" ] ; then + # No rescaling + SCALE_OPT="" +else + echo "Error! Quality setting unknown \"$QUALITY\"." >&2 + exit 1 +fi + +# Do we have at least an input album and a destination folder? +if [ $# -lt 2 ] ; then + echo "Usage:" >&2 + echo " $0 [ALBUM2 [...]]" >&2 + echo "DESTINATION is the base directory in which the converted albums will be stored." >&2 + echo "Each ALBUM is a directory containing TIFF files." >&2 + exit 1 +fi + +ALBUM_DEST="$1" +shift + +# Convert the pictures +while [ $# -gt 0 ] ; do + ALBUM="$1" + shift + ALBUM_NAME=$(basename "$ALBUM") + mkdir -p "$ALBUM_DEST/$ALBUM_NAME" + + for FILE in "$ALBUM"/*.tiff ; do + DEST_NAME=$(basename "$FILE" | sed "s/tiff$/$FORMAT/") + DEST_FILE="$ALBUM_DEST/$ALBUM_NAME/$DEST_NAME" + echo "\"$FILE\" -> \"$DEST_FILE\"" + + # Should we rotate the image? + ORIENTATION=$(tiffinfo "$FILE" | sed -n 's/^[\t ]*Orientation: //p') + if [ "$ORIENTATION" = "row 0 top, col 0 lhs" ] ; then + ROTATE_OPT="" # No rotation + elif [ "$ORIENTATION" = "row 0 bottom, col 0 rhs" ] ; then + ROTATE_OPT="-rotate 180" + else + # Print a warning to tell the user the script should be + # improved :-) + echo "Warning! Image orientation unknown: \"$ORIENTATION\"." >&2 + fi + + convert $SCALE_OPT $ROTATE_OPT "$FILE" "$DEST_FILE" + done +done + +echo +echo "Converted everything successfuly!"