Eine batch-aufgabe für Gimp oder ImageMagick?

23/05/2011 - 15:17 von Andreas Leitgeb | Report spam
Habe in letzter Zeit einen Haufen Fotos vom Mond gemacht, die sich in
erster Linie dadurch charakterisieren lassen, dass unter den 10 MP des
jpegs der Großteil schwarz ist, und nur "irgendwo" ein im Vergleich zum
Hintergrund deutlich helleres Zwetschgoid ist, das ich mit einem definierten
extra Rahmen von z.b. fix 40 Pixel herausgeschnitten haben will.

Also angenommen der Mond wàre wirklich exakt kreisrund (exakt Vollmond),
und der Mittelpunkt làge auf den Koordinaten 1000x1000 mit einem Radius
von 300 Pixel, dann hàtte ich gerne, dass aus dem originalen 3888x2592
Bild das Quadrat 660x660-1340x1340 herausgeschnitten würde, nur eben, dass
sich das Programm die Ausdehnung des helleren Blobs selber ermittelt (und
den Rand von 40 Pixel eben noch dabeilàsst).

Alternativ könnte das skript auch ein Quadrat vorgegebener Größe so
platzieren, dass der Mond (bzw dessen boundingbox) darin "exakt" zentral
liegt, und das Bild dann auf dieses Quadrat crop'en.
 

Lesen sie die antworten

#1 Ralf Döblitz
23/05/2011 - 23:34 | Warnen spam
Andreas Leitgeb wrote:
Habe in letzter Zeit einen Haufen Fotos vom Mond gemacht, die sich in
erster Linie dadurch charakterisieren lassen, dass unter den 10 MP des
jpegs der Großteil schwarz ist, und nur "irgendwo" ein im Vergleich zum
Hintergrund deutlich helleres Zwetschgoid ist, das ich mit einem definierten
extra Rahmen von z.b. fix 40 Pixel herausgeschnitten haben will.



Warum wollt ihr nur immer diese neumodischen Monsterprogramme nehmen wo
das gute alte netpbm mit ein wenig drumrum vollkommen ausreicht?

Share and enjoy!

#!/bin/sh
# This is a shell archive (produced by GNU sharutils 4.9).
# To extract the files from this archive, save it to some FILE, remove
# everything before the `#!/bin/sh' line above, then type `sh FILE'.
#
lock_dir=_sh15687
# Made on 2011-05-23 23:33 CEST by .
# Source directory was `/home/doeblitz/z_moon'.
#
# Existing files will *not* be overwritten, unless `-c' is specified.
#
# This shar contains:
# length mode name
# -
# 706 -rwxrwxr-x mooncrop
# 497 -rw-rw-r-- mooncrop.pgm
# 188 -rwxrwxr-x mooncrop.sh
#
MD5SUM=${MD5SUM-md5sum}
f=`${MD5SUM} --version | egrep '^md5sum .*(core|text)utils'`
test -n "${f}" && md5check=true || md5check=false
${md5check} || \
echo 'Note: not verifying md5sums. Consider installing GNU coreutils.'
save_IFS="${IFS}"
IFS="${IFS}:"
gettext_dirúILED
locale_dirúILED
first_param="$1"
for dir in $PATH
do
if test "$gettext_dir" = FAILED && test -f $dir/gettext \
&& ($dir/gettext --version >/dev/null 2>&1)
then
case `$dir/gettext --version 2>&1 | sed 1q` in
*GNU*) gettext_dir=$dir ;;
esac
fi
if test "$locale_dir" = FAILED && test -f $dir/shar \
&& ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
then
locale_dir=`$dir/shar --print-text-domain-dir`
fi
done
IFS="$save_IFS"
if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
then
echo=echo
else
TEXTDOMAINDIR=$locale_dir
export TEXTDOMAINDIR
TEXTDOMAIN=sharutils
export TEXTDOMAIN
echo="$gettext_dir/gettext -s"
fi
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null
then if (echo -n test; echo 1,2,3) | grep n >/dev/null
then shar_n= shar_c='
'
else shar_n=-n shar_c= ; fi
else shar_n= shar_c='\c' ; fi
f=shar-touch.$$
st1 0112312359.59
st23123592001.59
st2tr3123592001.5 # old SysV 14-char limit
st331235901

if touch -am -t ${st1} ${f} >/dev/null 2>&1 && \
test ! -f ${st1} && test -f ${f}; then
shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"'

elif touch -am ${st2} ${f} >/dev/null 2>&1 && \
test ! -f ${st2} && test ! -f ${st2tr} && test -f ${f}; then
shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"'

elif touch -am ${st3} ${f} >/dev/null 2>&1 && \
test ! -f ${st3} && test -f ${f}; then
shar_touch='touch -am $3$4$5$6$2 "$8"'

else
shar_touch=:
echo
${echo} 'WARNING: not restoring timestamps. Consider getting and
installing GNU `touch'\'', distributed in GNU coreutils...'
echo
fi
rm -f ${st1} ${st2} ${st2tr} ${st3} ${f}
#
if test ! -d ${lock_dir} ; then :
else ${echo} "lock directory ${lock_dir} exists"
exit 1
fi
if mkdir ${lock_dir}
then ${echo} "x - created lock directory ${lock_dir}."
else ${echo} "x - failed to create lock directory ${lock_dir}."
exit 1
fi
# = mooncrop =if test -f 'mooncrop' && test "$first_param" != -c; then
${echo} "x - SKIPPING mooncrop (file already exists)"
else
${echo} "x - extracting mooncrop (text)"
sed 's/^X//' << 'SHAR_EOF' > 'mooncrop' &&
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
X
my $border = 40;
X
while (my $fname = shift) {
X my @info = `$0.sh $fname`;
X my ($width, $height) = $info[0] =~ m/(\d+) by (\d+)/;
X my ($top) = $info[2] =~ m/(\d+) rows/;
X my ($bottom) = $info[3] =~ m/(\d+) rows/;
X my ($left) = $info[4] =~ m/(\d+) cols/;
X my ($right) = $info[5] =~ m/(\d+) cols/;
X system(join(' ', ('pnmcut',
X '-left', (($left < $border) ? 0 : $left-$border),
X '-top', (($top < $border) ? 0 : $top-$border),
X '-width', $width-$left-$right+2*$border,
X '-height', $height-$top-$bottom+2*$border,
X $fname,
X '>', $fname.'_cut',
X )
X )
X );
}
X
# end of file
SHAR_EOF
(set 20 11 05 23 23 30 20 'mooncrop'
eval "${shar_touch}") && \
chmod 0775 'mooncrop'
if test $? -ne 0
then ${echo} "restore of mooncrop failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'mooncrop': 'MD5 check failed'
) << \SHAR_EOF
363838ded82c1cd316c953e012381d26 mooncrop
SHAR_EOF
else
test `LC_ALL=C wc -c < 'mooncrop'` -ne 706 && \
${echo} "restoration warning: size of 'mooncrop' is not 706"
fi
fi
# = mooncrop.pgm =if test -f 'mooncrop.pgm' && test "$first_param" != -c; then
${echo} "x - SKIPPING mooncrop.pgm (file already exists)"
else
${echo} "x - extracting mooncrop.pgm (text)"
sed 's/^X//' << 'SHAR_EOF' > 'mooncrop.pgm' &&
P2
11 11
242
122 122 122 122 122 122 122 122 122 122 122
122 122 122 122 122 122 122 122 122 122 122
122 122 122 122 122 122 122 122 122 122 122
122 122 122 122 122 122 122 122 122 122 122
122 122 122 122 122 122 122 122 122 122 122
122 122 122 122 122 122 122 122 122 122 122
122 122 122 122 122 122 122 122 122 122 122
122 122 122 122 122 122 122 122 122 122 122
122 122 122 122 122 122 122 122 122 122 122
122 122 122 122 122 122 122 122 122 122 122
122 122 122 122 122 122 122 122 122 122 122
SHAR_EOF
(set 20 11 05 23 22 41 55 'mooncrop.pgm'
eval "${shar_touch}") && \
chmod 0664 'mooncrop.pgm'
if test $? -ne 0
then ${echo} "restore of mooncrop.pgm failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'mooncrop.pgm': 'MD5 check failed'
) << \SHAR_EOF
b4b9d7bf99814a927db981dc582c8425 mooncrop.pgm
SHAR_EOF
else
test `LC_ALL=C wc -c < 'mooncrop.pgm'` -ne 497 && \
${echo} "restoration warning: size of 'mooncrop.pgm' is not 497"
fi
fi
# = mooncrop.sh =if test -f 'mooncrop.sh' && test "$first_param" != -c; then
${echo} "x - SKIPPING mooncrop.sh (file already exists)"
else
${echo} "x - extracting mooncrop.sh (text)"
sed 's/^X//' << 'SHAR_EOF' > 'mooncrop.sh' &&
#!/bin/sh
X
pnmfile $1
X
pnmconvol `dirname $0`/`basename $0 .sh`.pgm $1 \
| ppmtopgm \
| pgmtopbm -threshold -value 0.3 \
| (pnmcrop -verbose 2>$$) >/dev/null
X
cat $$
X
rm $$
X
# end of file
SHAR_EOF
(set 20 11 05 23 23 31 48 'mooncrop.sh'
eval "${shar_touch}") && \
chmod 0775 'mooncrop.sh'
if test $? -ne 0
then ${echo} "restore of mooncrop.sh failed"
fi
if ${md5check}
then (
${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'mooncrop.sh': 'MD5 check failed'
) << \SHAR_EOF
529b35e034e0e4bee013613ef29af961 mooncrop.sh
SHAR_EOF
else
test `LC_ALL=C wc -c < 'mooncrop.sh'` -ne 188 && \
${echo} "restoration warning: size of 'mooncrop.sh' is not 188"
fi
fi
if rm -fr ${lock_dir}
then ${echo} "x - removed lock directory ${lock_dir}."
else ${echo} "x - failed to remove lock directory ${lock_dir}."
exit 1
fi
exit 0


Ralf
"de.alt.comp.kde Die Kommunistische Desktop Erweiterung."
  – Sven Paulus in <67hu21$43r$

Ähnliche fragen