2011-10-05
epsffit というコマンドを使えば,eps を回転できる.epsffit は少々使い勝手が悪いので,使いやすくするスクリプトを書いてみた.
epsffit は,次のようにすると,反時計周りに90度回転できる.
epsffit -r LLX LLY URX URY INPUT.eps OUTPUT.eps
ここで LLX LLY URX URY は bounding box (すべて整数値).
以下の点が使いにくい:
- bounding box を手動で指定する必要がある.
- 回転角が固定.
そこで,オリジナルの eps ファイルから bounding box を自動抽出し,90度刻みの任意の角に回転できるようにするスクリプトを書いた.
epsmanip
#!/bin/bash
function ask
{
while true; do
echo -n ' (y|n) > '
read s
if [ "$s" == "y" ];then return 0; fi
if [ "$s" == "n" ];then return 1; fi
done
}
infile=
outfile=
angle=0
while true; do
case "$1" in
-r|-rot)
case "$2" in
0) angle=0 ;;
90) angle=1 ;;
180) angle=2 ;;
270) angle=3 ;;
-90) angle=3 ;;
-180) angle=2 ;;
-270) angle=1 ;;
*) echo "choose angle from {-270,-180,-90,0,90,180,270}"; exit 1 ;;
esac
shift 2 ;;
'') shift; break ;;
*)
if [ -z "$infile" ];then infile=$1
elif [ -z "$outfile" ];then outfile=$1
else echo "too many options"; exit 1
fi
shift;;
esac
done
if ! [ -f $infile ];then
echo "input file does not exist: $infile"
exit 1
fi
if [ -z "$outfile" ];then outfile=$infile; fi
bbox=`grep '%%BoundingBox' $infile | sed 's/.*BoundingBox\s*:\(\(\s[0-9]\+\)*\)/\1/g'`
cp $infile /tmp/epsmanip$$.1
for ((i=0;i<$angle;i+=1));do
epsffit -r $bbox /tmp/epsmanip$$.1 /tmp/epsmanip$$.2
mv /tmp/epsmanip$$.2 /tmp/epsmanip$$.1
done
if [ -f $outfile ];then
echo "output file exists: $outfile"
echo "overwrite?"
if ! ask; then
rm -f /tmp/epsmanip$$.1
exit 1;
fi
fi
mv /tmp/epsmanip$$.1 $outfile
例えば時計周りに90度回転するには,
epsmanip -r -90 INPUT.eps OUTPUT.eps
とする.
注意
- インターフェイスはちゃんと作ってない.
- デバッグはまじめにやってない.
参考記事