#!/bin/sh # photo6 - Make 3x2 arranged photo image from one image # Last modified Sat Feb 13 20:38:45 2010 on firestorm # Update count: 13 # $Id: photo6,v 1.5 2010/02/13 11:39:58 yuuji Exp $ myname=`basename $0` usage () { sed -n 2p $0 cat<<_EOU_ $myname: Arguments... -c Original-Photo.jpg Create center-cropped jpeg files for every 50-90% range of original JPEG 元画像の中心部50〜90%の大きさで切り取った JPEGファイルを5個生成する。 Photo.jpg Generate 3x2 repeated image named photo6.jpg Photo.jpgを3x2=6個並べた photo6.jpg を生成 -t Foo Change root name of generated file from photo6 to Foo 生成するファイル名のベースを photo6 から Fooに変更 -g Select Greyscale output 出力画像をモノクロ(グレースケール)に Requirement: NetPBM, JPEG library(djpeg and cjpeg) Sample operation 1. Take a person's picture. Locate throat in the center. 履歴書風写真を撮りましょう。喉元が中央に来るようにね。 2a. Crop outsize of person so that new image size ratio becomes x:y = 42:45 (840x900 for example)... If you feel troubesome to calculate and operate photo editor, Try 2b. 人間が残るように写真の中心部を 横:縦 が 42:45 になるように 切り取ろう。たとえば840x900。え、面倒? なら2bへ。 2b. Try $myname -c photo.jpg and see generated cropped files. Select preferable one. photo-80%.jpg for example. $myname photo.jpg ってやってわらわらと出てきたファイルを見比べて 好きなのを選ぼう。photo-80%.jpg を選んだとする。 3. You'll get photo6.jpg by the following example. $myname photo-80%.jpg ↑ってやると photo6.jpg に六ッ切用の画像が出てくるよ。 4. デジカメ現像屋へGO! _EOU_ exit 0 } conf=~/.photo6rc verbose=0 margin=5 tmpdir=`mktemp -d /tmp/$myname-XXX` targetbase=photo6 fmt='-pnm' RM=/bin/rm finalize () { # 途中で ^C されたときにやるべき処理 $RM -rf $tmpdir # 特に必要なければ書かない echo 'さらばい.' exit 1 } trap finalize INT QUIT # 拾うシグナルを列挙 # 関数定義をつらつらと abort () { echo "Error on $*" 1>&2 finalize } cut () { cx=`expr $ow / 2` cy=`expr $oh / 2` for p in 5 6 7 8 9 10; do nh=`expr $oh \* $p / 10` h=`expr $nh - $margin \* 2` w=`expr $nh \* 42 / 45 - $margin \* 2` sx=`expr $cx - $w / 2` sy=`expr $cy - $h / 2` tf="${base}-${p}0%.jpg" djpeg "$fmt" $file | pnmcut $sx $sy $w $h | pnmmargin -wh $margin | cjpeg > $tf done } _3x2 () { raw="$tmpdir/$base.pnm" triple="$tmpdir/$base-3.pnm" djpeg "$file" > $raw || abort Creating pnm-image of $1 pnmcat -lr $raw $raw $raw > $triple || abort Making triple of $1 pnmcat -tb $triple $triple | cjpeg > $targetbase.jpg \ || abort Making photo6.jpg } while [ "$1" != "" ]; do case "$1" in -v) verbose=1 ;; -c) cut=1 ;; -h) usage ;; # -h helpオプション -t) shift; targetbase="$1" ;; -g) fmt='-grey' ;; --) shift; break ;; *) break ;; # -で始まらないものが来たら即処理突入 esac shift done # そんでメイン # 引数が一つもなかったらusage表示しておしまい if [ "$1" = "" ]; then usage fi sline=`rdjpgcom -v "$1"|head -1` if [ x"$sline" = x"" ]; then (echo "$1" is not JPEG file. echo Please use this script for JPEG file) 1>&2 finalize # exit 1 else ow=`expr "$sline" : ".* \([0-9][0-9]*\)w.*"` oh=`expr "$sline" : ".* \([0-9][0-9]*\)h.*"` file="$1" base=`expr "$1" : "\(.*\)\.[Jj][Pp][Gg]"` fi echo $ow, $oh 1>&2 if [ $cut ]; then cut "$1" else _3x2 fi # おちまい $RM -rf $tmpdir exit 0