From 80b0ab786aba79abb53d750cb5a3b6d028e339ef Mon Sep 17 00:00:00 2001 From: Kamil Bugajski Date: Fri, 31 Aug 2012 16:24:49 +0200 Subject: [PATCH] screenshots von internetseiten erzeugen --- bin/webscan | 187 ++++++++++++++++++++++++++++++++++++++++++++++++ bin/webscan.sh | 4 ++ cfg/webscan.cfg | 61 ++++++++++++++++ 3 files changed, 252 insertions(+) create mode 100755 bin/webscan create mode 100755 bin/webscan.sh create mode 100755 cfg/webscan.cfg diff --git a/bin/webscan b/bin/webscan new file mode 100755 index 0000000..694430a --- /dev/null +++ b/bin/webscan @@ -0,0 +1,187 @@ +#!/bin/bash +NUM=0 +QUEUE="" +MAX_NPROC=2 # default +REPLACE_CMD=0 # no replacement by default + +USAGE="A simple wrapper for generating jpg pictures out of svg-files in parallel. +Usage: `basename $0` [-h] [-i] [-j nb_jobs] command arg_list + -h Shows this help + -c give the path to the cfg file + -i give the file where the web-adresses are + -k chek if the output file already exist + -s set the sleeptime while there are too many simultanious jobs + -j Set number of simultanious jobs. Default is 2 + -o directory where the files should be moved to after creation. + Default ist PICCREATE_OUT + Examples: + `basename $0` -i file -c config + `basename $0` -j 3 -i file -c config" + +function cfg_parser { + INI_FILE=$1 + SECTION=$2 + eval `sed -n -e "/^\[$SECTION\]/,/^\s*\[/{/^[^;].*\=.*/p;}" < $INI_FILE` +} +function get_filepath { + # probiere alle möglichen Kombinationen wo das file stehen könnte je + # nachdem ob es mit oder ohne Endung, mit oder ohne den Komplettpfad + # gegeben wurde + FILENAME=$1 + ENDING=$2 + DEFAULT_DIR=$3 + if [ -s $FILENAME ] ; then + echo $FILENAME + elif [ -s $FILENAME.$ENDING ] ; then + echo "$FILENAME.$ENDING" + elif [ -s $DEFAULT_DIR/$FILENAME ] ; then + echo "$DEFAULT_DIR/$FILENAME" + elif [ -s $DEFAULT_DIR/$FILENAME.$ENDING ] ; then + echo "$DEFAULT_DIR/$FILENAME.$ENDING" + fi + return +} + +# Funktion die auf globalen Parametern beruht. +# überprüft ob alle notwendigen Angaben vorhanden sind +function check_params { + if [ -z "$INPUT_FILENAME" ]; then + echo "please give input file with -i." + exit 1 + fi + if [ -z "$CFG_FILENAME" ]; then + echo "please give config file with -c." + exit 1 + fi + + INPUT_FILE=`get_filepath $INPUT_FILENAME 'csv' $PICCREATE_WORK` + if [ ! -s $INPUT_FILE ] ; then + echo "-> input filename does not exist" + print "given was: -$INPUT_FILENAME-" + exit 1 + fi + CFG_PATH=`get_filepath $CFG_FILENAME 'cfg' $PICCREATE_CFG` + if [ ! -s $CFG_PATH ]; then + echo "-> config file with this name does not exist." + print "given was: -$CFG_FILENAME-" + exit 1 + fi + echo $INPUT_FILENAME + cfg_parser $CFG_PATH "$FILE_FORMAT" + echo 'using width '$width + echo 'using height '$height + if [ -z "$width" ]; then + echo "please give width=xxx in section [$FILE_FORMAT] in config $CFG_FILENAME." + exit 1 + fi + if [ -z "$height" ]; then + echo "please give height=xxx in section [$FILE_FORMAT] in config $CFG_FILENAME." + exit 1 + fi + FORMAT="$format" +} + + +# parse command line +if [ $# -eq 0 ]; then # must be at least one arg + echo "$USAGE" >&2 + exit 1 +fi + +CHECKFILE=1 +SLEEPTIME=0.5 +BACKGROUND='' +FILE_FORMAT='webscan' +OUTDIR=$PICCREATE_OUT +while getopts "j:i:kc:s:o:hc:f" OPT; do # "j:" waits for an argument "h" doesnt + case $OPT in + h) echo "$USAGE" + exit 0 ;; + j) MAX_NPROC=$OPTARG ;; + k) CHECKFILE=0 ;; + c) CFG_FILENAME=$OPTARG ;; + o) OUTDIR=$OPTARG ;; + s) SLEEPTIME=$OPTARG ;; + i) INPUT_FILENAME=$OPTARG ;; + f) FORMAT=$OPTARG ;; + *) echo "$USAGE" >&2; exit 1; # Default. + esac +done + +# Main program +echo Using $MAX_NPROC parallel threads +check_params + +# Starte die Abspeichern der ganzen Webseite als ganzes +echo $INPUT_FILE +for i in `cat $INPUT_FILENAME` +do + CUSTOMER_ID=`echo "$i" | sed -e 's/;.*//g'` + CUSTOMER_URL=`echo "$i" |sed -e 's/.*;//g'` + + FILE_PATH=$OUTDIR/$CUSTOMER_ID.$FORMAT + echo $FILE_PATH + wait + if [ -z $CUSTOMER_URL ] + then + echo 'i need a url!!' + echo $CUSTOMER_ID 'did not have an url, ist was set to www.syntops.de instead'>> logfile.txt + CUSTOMER_URL='www.syntops.de' + sleep + fi + if [ -s $FILE_PATH ] && [ $CHECKFILE -eq 1 ] + then + echo $FILE_PATH exists + else + CMDLINE="$CUTYCAPT/./CutyCapt --url=http://$CUSTOMER_URL --max-wait=20000 --min-width=800 --min-height=600 --out=$FILE_PATH" + $CMDLINE + wait + fi +done + +wait # wait for all processes to finish before exit + +echo "...all Webpages have been saved!" +echo "" +echo "Converting the pictures..." +echo " " + + +# Zuschnitt der seite auf das benötigte Format +# Das Bild wir hierfür erst gleichmäßig auf die forgegebene Breite Skaliert +# und anschließend die unten herüberstehende Höhe abgeschnitten +echo $outdir +for i in `ls $OUTDIR| grep .$FORMAT ` +do + FILE_PATH_IN=$OUTDIR/$i + FILE_PATH_OUT=$OUTDIR/'beschnitten'/$i + + if [ -s $FILE_PATH_OUT ] && [ $CHECKFILE -eq 1 ] + then + echo $PIC_NAME exists + else + RESIZE="${width}" + SLICE="${width}x${height}" + CMDLINE="convert $FILE_PATH_IN -resize $RESIZE -crop $SLICE $FILE_PATH_OUT" + echo $CMDLINE + (echo $ID; $CMDLINE) & + + + while [ `ps clx|grep -w 'convert' |wc -l` -ge $MAX_NPROC ]; do + sleep $SLEEPTIME + done + fi + # auskommentiert da bereits runtergeladene seiten behalten werden sollen + #rm $FILE_PATH + +done + +wait # wait for all processes to finish before exit + +rm $OUTDIR/'beschnitten'/*-[1-9].$FORMAT + + # Löscht den verschnitt aus dem output-ordner + + + +# vi:set wrapmargin=0 ai showmatch ts=4 syntax=sh: diff --git a/bin/webscan.sh b/bin/webscan.sh new file mode 100755 index 0000000..1caec03 --- /dev/null +++ b/bin/webscan.sh @@ -0,0 +1,4 @@ +#!/bin/bash +. setenv.sh +export CUTYCAPT=$PICCREATE_LIBS/CutyCapt + $PICCREATE_BIN/webscan "$@" diff --git a/cfg/webscan.cfg b/cfg/webscan.cfg new file mode 100755 index 0000000..258bd0d --- /dev/null +++ b/cfg/webscan.cfg @@ -0,0 +1,61 @@ +# wie gross soll das Bild werden +[globals] +# angabe der Länge und Breite in pixelanzahl oder bei 72dpi +# -> 2,83466799 pixel entsprechen 1 mm bei 72 dpi +# -> 11,811116625 pixel entsprechen 1 mm bei 300 dpi +# Ziel für die Grösse: +# height=70mm +# width=190mm +height=898 +width=2776 +#background=Karo.png +# 0,352775 * pixellänge[bei 72dpi] = länge[mm] +# -> 2,83466799 pixel entsprechen 10 mm +# -> 1000 pixel mit 72dpi entsprechen 352,78 mm +# (wenn man diesselbe Länge bei 300dpi erreichen will, braucht man 4166pixel, +# das 4,16 fache ) + +# was soll wohin geschrieben werden (,..,..) +lines=PunkteName + + +# Die Überschriften der csv-Eingabedatei werden so nach intern übersetzt: +[translation] +customerid=Kennummer +name = Name + +# das ist die TextZeile die auf das Bild kommt +[PunkteName] +# hier der Inhalt aus der Eingabedatei, der geschrieben werden soll +content=${name} +# Ab dem Punkt wird zu schreiben begonnen +x=-10 +y=0 +height=850 +width=2640 +# Fontname und Fonttyp +fontname=ausgangsschrift +glyph_space=20 +counter_replace=True +#align=center,left,right +align=center +yalign=center +autoscale=True + +[jpg] +width=2776 +height=898 +format=jpg +density=300 + +[png] +width=460 +height=149 +format=png +density=90 + +[webscan] +width=800 +height=600 +format=jpg +density=90