mirror of
https://abf.rosa.ru/djam/cups.git
synced 2025-02-23 22:02:46 +00:00
136 lines
3.5 KiB
Bash
136 lines
3.5 KiB
Bash
#!/bin/bash
|
|
#set -x
|
|
#
|
|
# Photo Print
|
|
# -----------
|
|
#
|
|
# Till Kamppeter (http://www.linuxprinting.org/till/)
|
|
#
|
|
# Derived from a script from Max Barel (max dot barel at wanadoo dot fr)
|
|
#
|
|
# License: GPL (www.gnu.org)
|
|
#
|
|
#
|
|
# Script for printing several photos/image files on on sheet of paper.
|
|
#
|
|
# For example for printing 4 postcard-sized photos on one A4/Letter sheet
|
|
# (1 A4/Letter sheet of photo paper is much cheaper than 4 postcard-sized
|
|
# sheets, and 1 A4/Letter image is printed faster than 4 postcards).
|
|
#
|
|
# Reqirements:
|
|
#
|
|
# CUPS printing system (www.cups.org)
|
|
# ImageMagick (www.imagemagick.org)
|
|
#
|
|
# Installation:
|
|
#
|
|
# Copy this file into the /usr/bin or /usr/local/bin directory and make it
|
|
# executable with the command "chmod a+rx photo_print".
|
|
#
|
|
# This script mounts photos together to one big image using the "montage"
|
|
# command of ImageMagick without scaling the images to avoid quality loss.
|
|
# It sends the resulting image to the printer and lets the image file filter
|
|
# of CUPS scale the image to fit into the page. By default, 4 images are
|
|
# printed on one sheet, but the number can be changed with the "-t" option.
|
|
# On the command line can be given any number of photos, if necessary more
|
|
# than one page is printed. So one can easily print all the photos from one
|
|
# directory with one command line:
|
|
#
|
|
# photo_print -P Epson1290 *.jpg
|
|
#
|
|
#
|
|
#
|
|
# Command line parameters and their defaults:
|
|
#
|
|
# "-t XxY": Matrix size (Number of columns x number of rows)
|
|
tile=2x2
|
|
#
|
|
# "-s n": Scaling (100 % fills the sheet exactly)
|
|
# If parts of the edges of the images get lost due to unprintable borders,
|
|
# use a scaling value lower than 100 to shrink the image to fit the printable
|
|
# area. With an HP DeskJet 990C you get the best result with a value of 95 when
|
|
# using A4 paper and 90 when using Letter paper assuming the width/height ratio
|
|
# of the images being 4:3.
|
|
scaling=100
|
|
#
|
|
# "-p": Preview: when this option is given, from every page a preview is shown
|
|
# and the user is asked on the console whether he wants to print the page.
|
|
preview=0
|
|
#
|
|
# "-P xxx": Printer on which the photos should be printed (leave blank to use
|
|
# the default printer)
|
|
printer=""
|
|
#
|
|
# "-o option=value": Driver options ("-o option=value") to give on the command
|
|
# line of the "lpr" command of CUPS
|
|
options=""
|
|
#
|
|
|
|
#Get parameters from above from the command line
|
|
moreoptions=1;
|
|
while [ $moreoptions == 1 ]
|
|
do
|
|
case $1 in
|
|
-t)
|
|
shift
|
|
tile=$1
|
|
shift
|
|
;;
|
|
-s)
|
|
shift
|
|
scaling=$1
|
|
shift
|
|
;;
|
|
-p)
|
|
shift
|
|
preview=1
|
|
;;
|
|
-o)
|
|
shift
|
|
options="$options -o $1"
|
|
shift
|
|
;;
|
|
-P)
|
|
shift
|
|
printer="-P $1"
|
|
shift
|
|
;;
|
|
-h)
|
|
echo "Usage: $0 -P printer -s Scaling -t COLUMNSxROWS -o option=value ... file1 file2 ..."
|
|
exit 0
|
|
;;
|
|
* )
|
|
moreoptions=0;
|
|
;;
|
|
esac
|
|
done
|
|
|
|
l=$(echo $tile |cut -f1 -dx);
|
|
L=$(echo $tile |cut -f2 -dx);
|
|
nbfich=$[ $l * $L ]
|
|
freespaces=0
|
|
|
|
page=1
|
|
|
|
while [ "$#" -gt 0 ]
|
|
do
|
|
if [ "$nbfich" -gt "$#" ]; then
|
|
freespaces=$[ $nbfich - $# ]
|
|
nbfich="$#"
|
|
fi
|
|
images=$( echo $* | cut -f1-$nbfich -d " " )
|
|
shift $nbfich
|
|
while [ "$freespaces" -gt 0 ]; do
|
|
images="$images NULL:"
|
|
freespaces=$[ $freespaces - 1 ]
|
|
done
|
|
( [ $preview == 0 ] ||
|
|
(montage -geometry "128x96+2+2" -tile $tile $images miff:-\
|
|
| display -title "Page $page" &
|
|
echo -n "Print this page? "; read in; killall display; [ x$in == xy ] ) ) &&\
|
|
montage -cache 10 -geometry "100%+2+2" -tile $tile $images pro$page.bmp &&\
|
|
lpr $printer -o scaling=$scaling $options pro$page.bmp -r
|
|
page=$[page + 1]
|
|
done
|
|
wait
|
|
rm -f pro[0-9]*.bmp
|