Ich erhalte in einer Variable u.a. Text: convert test.jpg -strip -colors 216 gif:- | convert - histogram:- | \ identify -verbose - /tmp/magick-XXEQJNIJ MIFF 256x200 256x200+0+0 DirectClass 13kb Image: /tmp/magick-XXEQJNIJ Format: MIFF (Magick Image File Format) Geometry: 256x200 Class: DirectClass Type: Palette Endianess: Undefined Colorspace: RGB Channel depth: Red: 1-bits Green: 1-bits Blue: 1-bits Channel statistics: Red: Min: 0 (0) Max: 1 (1) Mean: 0.0684766 (0.0684766) Standard deviation: 0.252562 (0.252562) Green: Min: 0 (0) Max: 1 (1) Mean: 0.068457 (0.068457) Standard deviation: 0.252529 (0.252529) Blue: Min: 0 (0) Max: 1 (1) Mean: 0.068457 (0.068457) Standard deviation: 0.252529 (0.252529) Colors: 8 Histogram: 44545: ( 0, 0, 0) black 1292: ( 0, 0,255) blue 1046: ( 0,255, 0) lime 811: ( 0,255,255) aqua 1362: (255, 0, 0) red 496: (255, 0,255) fuchsia 742: (255,255, 0) yellow 906: (255,255,255) white Rendering-intent: Undefined Resolution: 72x72 Units: Undefined Filesize: 13kb Interlace: None Background Color: white Border Color: #DFDFDF Matte Color: grey74 Page geometry: 256x200+0+0 Dispose: Undefined Compression: LZW Orientation: Undefined Comment: 58485: ( 6, 5, 5) #060505 25190: ( 10, 13, 16) #0A0D10 ... Gesucht ist nun die Farbe, die am häufigsten vorkommt, wobei schwarz und weiß ignoriert werden soll. Das ist also "1362: (255, 0, 0) red" Wie extrahiere ich nun in eine neue Variable "red"? Ich nehme mal an, dass in jeder identify Ausgabe Histogram und Rendering-intent vorkommt, vielleicht steht da aber manchmal noch anderer Text dazwischen. Nehmen wir als an, dass alles zu betrachtende Zeilen sind, die in diesem Bereich (ab Histogram - Rendering-intent) mit einer Zahl beginnen. Die Zeile, die "( 0, 0, 0) black" oder "(255,255,255) white" enthält kann gelöscht werden. Vielen Dank für eure Tips. Al
Hallo, Am Tue, 06 Sep 2005, Al Bogner schrieb:
Wie extrahiere ich nun in eine neue Variable "red"?
Einfach: COLOR="` ... identify ... | \ sed -n '/Histogram:/,/Rendering-intent:/p' | \ sort -n | grep -v 'white\|black' | tail -n 1 | awk '{print $NF;}'`" So, sed+grep+awk ist "bäh", also hab ich noch ein bisserl gebastelt und alles mit awk: ==== identify_out="`... identify ...`" set +H ## weiss nicht, ob das in einem script wichtig ist COLOR="`echo \"$identify_out\" | awk -F: ' BEGIN { max = 0; } /Histogram:/,/Rendering-intent:/ { if( $0 !~ /Hist|Rend|white|black/ ) { if( $1 > max ) { max = $1; maxcol = gensub("[()0-9, ]", "", "g", $2); } } } END { print maxcol; }' | read COLOR ==== Falls du die Ausgabe von identify mehrmals brauchst dann speichere dessen Ausgabe in einer Variablen zwischen. HTH, -dnh -- There are three kinds of people: Those who can count & those who can't.
Hallo, Am Wed, 07 Sep 2005, David Haller schrieb:
Am Tue, 06 Sep 2005, Al Bogner schrieb:
Wie extrahiere ich nun in eine neue Variable "red"? ==== identify_out="`... identify ...`" set +H ## weiss nicht, ob das in einem script wichtig ist COLOR="`echo \"$identify_out\" | awk -F: ' [..] ====
*AAARRRRGHHHH* Da hab' ich doch glatt die falsche Version stehen lassen... Richtig ist: ==== identify_out="`... identify ...`" set +H ## weiss nicht, ob das in einem script wichtig ist COLOR="`echo \"$i\" | awk -F: ' BEGIN { max = 0; } /Histogram:/,/Rendering-intent:/ { if( $0 !~ /Histo|Render|white|black/ ) { if( $1 > max ) { max = $1; maxcol = gensub("[()0-9, ]", "", "g", $2); } } } END{ print maxcol; }'`" ==== HTH, -dnh -- Weiß ich auch nicht. Ich kenn nur Obi. Das ist dieses kleine perverse Vieh, das ständig im Werbefernsehen zum sodomistischen Gangbang auffordert. Oder was meint der sonst mit "Alles in Obi!"? -- Steffi Abel in darw
Am Mittwoch, 7. September 2005 02:32 schrieb David Haller: Hallo David,
Am Tue, 06 Sep 2005, Al Bogner schrieb:
Wie extrahiere ich nun in eine neue Variable "red"?
Einfach:
COLOR="` ... identify ... | \ sed -n '/Histogram:/,/Rendering-intent:/p' | \ sort -n | grep -v 'white\|black' | tail -n 1 | awk '{print $NF;}'`"
So, sed+grep+awk ist "bäh"
Funktioniert, während ich hier mit deiner 2. Variante Probleme habe. Es ist zwar mittlerweile geringfügig anders, aber ich sehe da keinen entscheidenden Unterschied: convert "$INP" -strip -resize 100x -blur 3x3 -colors 16 "$GIFFILE" identify_out="`identify -verbose $GIFFILE`" # Das fehlende Quoting von $GIFFILE sollte kein Problem sein, # die Datei hat keine Leerzeichen set +H ## weiss nicht, ob das in einem script wichtig ist COLOR="`echo \"$i\" | awk -F: ' BEGIN { max = 0; } /Histogram:/,/Rendering-intent:/ { if( $0 !~ /Histo|Render|white|black/ ) { if( $1 > max ) { max = $1; maxcol = gensub("[()0-9, ]", "", "g", $2); } } } END{ print maxcol; }'`" echo COLOR $COLOR Ich verstehe auch nicht, was du da alles gemacht hast. Zuerst wird eine Variable identify_out definiert. Was set +H bedeutet will mir "man set" nicht verraten. Warum nun $i definiert ist, ist mir auch nicht klar ... In der IM-ML kam zu einer ähnlichen Problematik folgender Hinweis: convert rose: -strip -colors 216 histogram:- | \ sed -n '/^Comment={/,/^}/{ s///; /^$/q; s///; p; }' | \ sort -rn | head -1 Result for a rose image... 115: (253,253,251) #FDFDFB Allerdings wird hier der Comment-Tag des Histogramm-Files ausgewertet, der für mich nicht zielführend ist. Es geht darum festzustellen, welche Farbe des Bildes dominiert. Ich denke, dass es reicht auf 16 Farben einzugrenzen. Al
Hallo, Am Wed, 07 Sep 2005, Al Bogner schrieb: [..]
Funktioniert, während ich hier mit deiner 2. Variante Probleme habe. Es ist zwar mittlerweile geringfügig anders, aber ich sehe da keinen entscheidenden Unterschied:
convert "$INP" -strip -resize 100x -blur 3x3 -colors 16 "$GIFFILE"
identify_out="`identify -verbose $GIFFILE`" # Das fehlende Quoting von $GIFFILE sollte kein Problem sein, # die Datei hat keine Leerzeichen
Jup. Aber generell: identify_out="`identify -verbose \"$GIFFILE\"`"
set +H ## weiss nicht, ob das in einem script wichtig ist [..]
Ich verstehe auch nicht, was du da alles gemacht hast. Zuerst wird eine Variable identify_out definiert. Was set +H bedeutet will mir "man set" nicht verraten.
==== help set ==== -H Enable ! style history substitution. ====
Warum nun $i definiert ist, ist mir auch nicht klar ...
*ARGSL* Das war vom c&p aus der Konsole, wo ich i statt identify_out verwendet habe... COLOR="`echo \"$identify_out\" | awk -F: ' BEGIN { max = 0; } /Histogram:/,/Rendering-intent:/ { if( $0 !~ /Histo|Render|white|black/ ) { if( $1 > max ) { max = $1; maxcol = gensub("[()0-9, ]", "", "g", $2); } } } END{ print maxcol; }'`" -dnh --
Aber nochmal zu MEINEM Problem: ich habe genau 2 Programme denen ich verbieten will (egal auf welchem port) eine Verbindung nach aussen herzustellen. OS ist WinXP. -- Ralf Kuntoff Und wie heißt das andere Programm? -- Rainer Koenig, in dcsf
Am Mittwoch, 7. September 2005 17:39 schrieb David Haller: Hallo David,
Am Wed, 07 Sep 2005, Al Bogner schrieb:
Jup. Aber generell: identify_out="`identify -verbose \"$GIFFILE\"`"
Ich "liebe" dieses Quoting, aber du hast natürlich recht, man sollte das so machen, auch wenn garantiert "problemlose" Dateinamen per Script definiert werden.
set +H ## weiss nicht, ob das in einem script wichtig ist
[..]
Ich verstehe auch nicht, was du da alles gemacht hast. Zuerst wird eine Variable identify_out definiert. Was set +H bedeutet will mir "man set" nicht verraten.
==== help set ==== -H Enable ! style history substitution. ====
Warum nun $i definiert ist, ist mir auch nicht klar ...
*ARGSL* Das war vom c&p aus der Konsole, wo ich i statt identify_out verwendet habe...
Ich habe mich in der Zwischenzeit die "bääh"-Variante in Verwendung. $i hatte ich probeweise bereits durch die definierte Variable ersetzt und das hatte auch nicht funktioniert, ich vermute mal, es lag am Quoting. Danke vielmals (wie immer) Al PS: Kommen meine PM bei dir nicht an? In letzter Zeit erlebe ich die verrücktesten Dinge bei Mailzustellung, während es mit den meisten gut klappt, ist es mit anderen zu verzweifeln. Ich hoffe da funkt nicht doch noch irgendwo ein "SPF all" dazwischen, aber mit GMX habe ich keine Probleme mehr. Subject: Fwd: Re: dcraw-request: NEF-rawfile from Nikon Coolscan V - LS50 Date: Sonntag, 4. September 2005 11:13
Hallo, Am Thu, 08 Sep 2005, Al Bogner schrieb:
Am Mittwoch, 7. September 2005 17:39 schrieb David Haller:
Am Wed, 07 Sep 2005, Al Bogner schrieb:
Jup. Aber generell: identify_out="`identify -verbose \"$GIFFILE\"`"
Ich "liebe" dieses Quoting, aber du hast natürlich recht, man sollte das so machen, auch wenn garantiert "problemlose" Dateinamen per Script definiert werden.
*g* Jep. Ok, wenn du "$GIFFILE" selber generierst (z.B. per mktemp), dann kann man sich ggfs. ausnahmsweise das innere quoten auch mal sparen. Das aeussere aber in diesem Fall aber auf keinen Fall (schon allein, weil die Ausgabe von identify mehrzeilig ist)... Und das mit dem inneren quoten faellt nur auf die Schnauze (IIRC), wenn die Variable ein " enthaelt. Und das ist um laengen besser als alle anderen Varianten. Kurzum: wenn man keinen *guten* Grund hat nicht zu quoten sollte man eben so quoten. Ich hab's mir z.B. inzwischen einfach angewoehnt.
Warum nun $i definiert ist, ist mir auch nicht klar ...
*ARGSL* Das war vom c&p aus der Konsole, wo ich i statt identify_out verwendet habe...
Ich habe mich in der Zwischenzeit die "bääh"-Variante in Verwendung.
Die sollte auch funktionieren ;) BTW: den Fall, dass identify nicht die erwartete ausfuehrliche Ausgabe ergibt solltest du noch einbauen, z.B.: echo "$identify_out" | grep -q 'Histogram:' || { echo "identify found no Histogram! Exiting"; exit 1; } Oder sowas in der Art ;)
$i hatte ich probeweise bereits durch die definierte Variable ersetzt und das hatte auch nicht funktioniert, ich vermute mal, es lag am Quoting.
Hm. Also bei mir klappt die "nur-awk"-Version genauso... ==== $ identify_out='copy and paste aus deiner ersten mail ...' $ set +H ### beim testen in der Shell relevant wg. des !~ im awk-script $ echo "$identify_out" | wc -l 54 $ COLOR="`echo \"$identify_out\" | awk -F: ' BEGIN { max = 0; } /Histogram:/,/Rendering-intent:/ { if( $0 !~ /Histo|Render|white|black/ ) { if( $1 > max ) { max = $1; maxcol = gensub("[()0-9, ]", "", "g", $2); } } } END{ print maxcol; }'`" $ echo $COLOR red ==== Versuch mal nachzuvollziehen, was die "baehh"-Variante macht und was die "awk-only" Variante macht... Auch wenn der Weg unterschiedlich ist, das Ergebnis sollte gleich sein...
Danke vielmals (wie immer)
Bitte ;)
Al
PS: Kommen meine PM bei dir nicht an?
Normal schon -- auch wenn ich z.T. lange nicht antworte (da muss man mir eben (per mail) virtuell in den Allerwertesten "treten" ;)... Aber:
In letzter Zeit erlebe ich die verrücktesten Dinge bei Mailzustellung, während es mit den meisten gut klappt, ist es mit anderen zu verzweifeln. Ich hoffe da funkt nicht doch noch irgendwo ein "SPF all" dazwischen, aber mit GMX habe ich keine Probleme mehr.
Subject: Fwd: Re: dcraw-request: NEF-rawfile from Nikon Coolscan V - LS50 Date: Sonntag, 4. September 2005 11:13
Nee, ne Mail mit so nem Subject ist hier IIRC nicht aufgeschlagen... Schick sie mal an die "From"-Adresse, die ich hier verwende, wenn die nicht ankommt kann's nur noch spamassassin sein, und der hat bei mir bisher nur einmal ein false-positive produziert (bei x-tausend right-positives)... Aha! Hab mal im procmail-log nach 'NEF' gegreppt: ==== procmail.log ==== Subject: Fwd: Re: dcraw-request: NEF-rawfile from Nikon Coolscan V - LS50 Folder: spammed-probable ==== mail-header ==== X-Spam-Checker-Version: SpamAssassin 2.63 (2004-01-11) on slarty.dhaller.de X-Spam-Level: **** X-Spam-Status: No, hits=4.0 required=5.0 tests=BAYES_99 autolearn=no version=2.63 ==== *HUCH* Ja wie? Was? Hae??? Nuja, in aller Kuerze: das "P6 ..." ist ein ppm Header, siehe 'man ppm' (bzw. die Doku als html[1] [doc/packages/netpbm/html/ppm.html]). Der Rest laesst sich evtl. auch per 'dd' erledigen: $ { # echo -e 'P6\n<WIDTHinPX>\n<HEIGHTinPX>\n<MAXCOL>\n'; z.B.: echo -e 'P6\n2796\n1885\n255\n' dd if=foo.nef bs=1 skip=1897807 } > foo.ppm Ob das klappt weiss ich aber natuerlich nicht ;) Kann aber gut sein, dass das ganze bitgeschiebe in 'scan.c' noetig ist, mehr dann per PM ok? Ich hab die Mail jedenfall mal in meine inbox verschoben (und markiert). -dnh [1] mein ~/bin/man, das das Problem umgeht kann ich mailen -- "Wenn das Wörtchen 'wenn' nicht wär' , wär' die Platte jetzt nicht leer." -- ratti in suse-linux
participants (2)
-
Al Bogner
-
David Haller