Sophie

Sophie

distrib > Mageia > 8 > aarch64 > by-pkgid > a6f7fdabe9f6c05ace50419d1669bc1a > files > 22

cups-2.3.3op2-1.mga8.src.rpm

#!/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