Last active
September 20, 2017 19:16
-
-
Save smotesko/f1a45397639b1f675a85eeab7eabdec3 to your computer and use it in GitHub Desktop.
Composes two images into a single image of the same size, with a slightly diagonal line between them
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/env bash | |
set -e | |
STROKECOLOR="white" | |
STROKEWIDTHDIV=38 | |
STROKEPOINTOFFSETDIV=25 | |
if [ "$#" -ne 3 ]; then | |
echo "Usage:" | |
echo "$0 left_image right_image composed_image" | |
echo | |
echo "This script stitches two images of the same size into one image " | |
echo "(of the same size) with a slightly diagonal line between the " | |
echo "left and right halves. Should be useful for 'before and after' " | |
echo "illustrations." | |
echo "I really hope your filenames have .extensions" | |
echo "Written by Volodymyr Smotesko" | |
exit 1 | |
fi | |
WIDTH1=$(identify -format "%[fx:w]" "$1") | |
HEIGHT1=$(identify -format "%[fx:h]" "$1") | |
WIDTH2=$(identify -format "%[fx:w]" "$2") | |
HEIGHT2=$(identify -format "%[fx:h]" "$2") | |
if [ $WIDTH1 -ne $WIDTH2 ]; then | |
echo "input images must have same dimensions" | |
exit 1 | |
fi | |
if [ $HEIGHT1 -ne $HEIGHT2 ]; then | |
echo "input images must have same dimensions" | |
exit 1 | |
fi | |
WIDTH=$WIDTH1 | |
HEIGHT=$HEIGHT1 | |
QWIDTH=$(echo "$WIDTH/4" | bc) | |
STROKEPOINTOFFSET=$(echo "$WIDTH/$STROKEPOINTOFFSETDIV" | bc) | |
STROKEWIDTH=$(echo "$WIDTH/$STROKEWIDTHDIV" | bc) | |
STROKEPOINT1X=$(echo "$WIDTH/2+$STROKEPOINTOFFSET" | bc) | |
STROKEPOINT1Y=$(echo "0" | bc) | |
STROKEPOINT2X=$(echo "$WIDTH/2-$STROKEPOINTOFFSET" | bc) | |
STROKEPOINT2Y=$(echo "$HEIGHT" | bc) | |
STITCHEDFILE="$3" | |
STITCHEDFILEDIR=$(dirname "$STITCHEDFILE") | |
STITCHEDFILENAME=$(basename "$STITCHEDFILE") | |
STITCHEDFILENOEXT="${STITCHEDFILENAME%.*}" | |
STITCHEDFILEEXT="${STITCHEDFILENAME##*.}" | |
STITCHEDFILE="$STITCHEDFILEDIR/$STITCHEDFILENOEXT-stitched.$STITCHEDFILEEXT" | |
LEFTFILENAME=$(basename "$1") | |
LEFTFILENOEXT="${LEFTFILENAME%.*}" | |
LEFTFILEEXT="${LEFTFILENAME##*.}" | |
LEFTFILE="$STITCHEDFILEDIR/$LEFTFILENOEXT-lefthalf.$LEFTFILEEXT" | |
RIGHTFILENAME=$(basename "$2") | |
RIGHTFILENOEXT="${RIGHTFILENAME%.*}" | |
RIGHTFILEEXT="${RIGHTFILENAME##*.}" | |
RIGHTFILE="$STITCHEDFILEDIR/$RIGHTFILENOEXT-righthalf.$RIGHTFILEEXT" | |
MASKFILE="$STITCHEDFILEDIR/$STITCHEDFILENOEXT-strokemask.gif" | |
STROKE="M $STROKEPOINT1X,$STROKEPOINT1Y L $STROKEPOINT2X,$STROKEPOINT2Y" | |
convert \ | |
-size ${WIDTH}x${HEIGHT} xc:black -fill white \ | |
-draw "path '$STROKE $WIDTH,$HEIGHT $WIDTH,0 Z'" \ | |
"$MASKFILE" | |
convert "$1" -repage -$QWIDTH+0 -background $STROKECOLOR -flatten "$LEFTFILE" | |
convert "$2" -repage +$QWIDTH+0 -background $STROKECOLOR -flatten "$RIGHTFILE" | |
convert "$LEFTFILE" "$RIGHTFILE" "$MASKFILE" -composite "$STITCHEDFILE" | |
convert -stroke $STROKECOLOR -fill $STROKECOLOR -strokewidth $STROKEWIDTH \ | |
-draw "stroke-linecap round path '$STROKE'" \ | |
"$STITCHEDFILE" "$3" | |
rm "$LEFTFILE" "$RIGHTFILE" "$MASKFILE" "$STITCHEDFILE" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment