muxsa/bin/muxsa-pv

139 lines
5.2 KiB
Plaintext
Raw Normal View History

2023-03-26 16:39:10 +02:00
#!/bin/bash
# muxsa-pv
#
# part of muxsa, https://git-nks-public.tik.uni-stuttgart.de/edu/muxsa
#
# this script reads a series of png files (preferably created with
# muxsa-kvm2png) and creates new png files, with the current file
# large and the next file somewhat smaller. The result looks similar
# to the "presenter view" in slide presentation software.
# MIT License
#
# Copyright (c) 2023 Sebastian Kiesel <sebastian.kiesel@tik.uni-stuttgart.de>
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
############################################################################
echo "This is muxsa-pv."
# various parameters can be set as an environment variable (export XX="y z")
# or can be set in our RC file. Otherwise we will assign default values below.
if [ -r "${HOME}/.muxsarc" ] ; then
echo "Found ${HOME}/.muxsarc ... will source it."
. "${HOME}/.muxsarc"
fi
echo "Will work with these settings:"
echo "MUXSA_KVM2PNG_SLIDE_PREFIX=${MUXSA_KVM2PNG_SLIDE_PREFIX:=""}"
echo "MUXSA_PV_OUT_DIR=${MUXSA_PV_OUT_DIR:="presenter-view"}"
echo "MUXSA_PV_RM_OUT_DIR=${MUXSA_PV_RM_OUT_DIR:="0"}"
echo "MUXSA_PV_SIZE_X=${MUXSA_PV_SIZE_X:="1680"}"
echo "MUXSA_PV_MARGIN_Y=${MUXSA_PV_MARGIN_Y:="4"}"
if [ ! "${MUXSA_PV_SIZE_Y}" ] ; then
# the left image will be scaled to a width of 64%
# of the width of the output image. assuming an aspect ratio of 16:9,
# its height will be 9/16 * 64% = 36% of that.
MUXSA_PV_SIZE_Y=$(( ${MUXSA_PV_SIZE_X} * 36/100 + 2*${MUXSA_PV_MARGIN_Y} ))
fi
echo "MUXSA_PV_SIZE_Y=${MUXSA_PV_SIZE_Y}"
echo
# left image is 64 % of target width, starting at an offset of 1%
# right image is 32 % of target width, starting at 1+64+2%, leaving 1% right
X01=$(( ${MUXSA_PV_SIZE_X} * 1 / 100 ))
X32=$(( ${MUXSA_PV_SIZE_X} * 32 / 100 ))
X64=$(( ${MUXSA_PV_SIZE_X} * 64 / 100 ))
X67=$(( ${MUXSA_PV_SIZE_X} * 67 / 100 ))
MAX_Y=$(( ${MUXSA_PV_SIZE_Y} - 2 * ${MUXSA_PV_MARGIN_Y} ))
############################################################################
if [ -e "${MUXSA_PV_OUT_DIR}" ] ; then
echo "Output dir ${MUXSA_PV_OUT_DIR} exists."
if [ "${MUXSA_PV_RM_OUT_DIR}" = "1" ] ; then
echo "Removal requested by MUXSA_PV_RM_OUT_DIR. rm -rf ..."
rm -rf "${MUXSA_PV_OUT_DIR}"
else
echo "Removal NOT requested by MUXSA_PV_RM_OUT_DIR. abort."
exit 1
fi
fi
mkdir -p "${MUXSA_PV_OUT_DIR}"
if [ ! -d "${MUXSA_PV_OUT_DIR}" ] ; then
echo "Could not create output dir ${MUXSA_PV_OUT_DIR}. abort."
exit 1
fi
############################################################################
TMP_FILE_LEFT="$(mktemp -t muxsa-pv-XXXXXXXXXX.ppm)"
if [ ! -w "${TMP_FILE_LEFT}" ] ; then
echo "Error: cannot create tmp_file. abort."
exit 1
fi
TMP_FILE_RIGHT="$(mktemp -t muxsa-pv-XXXXXXXXXX.ppm)"
if [ ! -w "${TMP_FILE_RIGHT}" ] ; then
rm -f -- "${TMP_FILE_LEFT}"
echo "Error: cannot create tmp_file. abort."
exit 1
fi
trap 'rm -f -- "${TMP_FILE_LEFT}" "${TMP_FILE_RIGHT}"' EXIT
############################################################################
# find . -maxdepth 1 -name "${MUXSA_KVM2PNG_SLIDE_PREFIX}????.png" | sort | \
# while read RIGHT_FN ; do
for RIGHT_FN in ${MUXSA_KVM2PNG_SLIDE_PREFIX}????.png "" ; do
if [ ! -f "${LEFT_FN}" ] ; then
LEFT_FN="${RIGHT_FN}"
continue
fi
OUTFILE="${MUXSA_PV_OUT_DIR}/${LEFT_FN}"
echo "muxsa-pv: processing ${LEFT_FN} + ${RIGHT_FN:-(null)} to ${OUTFILE}"
pngtopnm "${LEFT_FN}" | \
pnmscale -xysize ${X64} ${MAX_Y} | \
pnmpad -width ${X64} -height ${MAX_Y} > "${TMP_FILE_LEFT}"
if [ -f "${RIGHT_FN}" ] ; then
pngtopnm "${RIGHT_FN}" | \
pnmscale -xysize ${X32} ${MAX_Y} | \
pnmpad -width ${X32} -height ${MAX_Y} > "${TMP_FILE_RIGHT}"
else
pbmmake -black ${X32} ${MAX_Y} > "${TMP_FILE_RIGHT}"
fi
pbmmake -black ${MUXSA_PV_SIZE_X} ${MUXSA_PV_SIZE_Y} | \
pnmpaste -replace "${TMP_FILE_LEFT}" ${X01} ${MUXSA_PV_MARGIN_Y} | \
pnmpaste -replace "${TMP_FILE_RIGHT}" ${X67} ${MUXSA_PV_MARGIN_Y} | \
pnmtopng -force > "${OUTFILE}"
LEFT_FN="${RIGHT_FN}"
done
echo "muxsa-pv finished successfully!"
############################################################################