Willkommen im #Neuland
Login wie bei quake.ingame.de zuvor, die Passwörter aus der alten Datenbank wurden aber gelöscht - einmal hier neu anfordern.
Wer seine E-Mail-Adresse nicht mehr hat oder kennt, bitte eine Nachricht mit Infos schicken o. im Discord melden.
PQ Discord Server: #planetquake Spenden? Hier entlang!
Login wie bei quake.ingame.de zuvor, die Passwörter aus der alten Datenbank wurden aber gelöscht - einmal hier neu anfordern.
Wer seine E-Mail-Adresse nicht mehr hat oder kennt, bitte eine Nachricht mit Infos schicken o. im Discord melden.
PQ Discord Server: #planetquake Spenden? Hier entlang!
commandline colorpicker tool
commandline colorpicker tool
hi
ich suche ein commandline-tool mit dem ich die farbe eines beliebigen pixels aus einer bilddatei (primär jpg, unterstützung für andere formate wäre auch fein) ermitteln kann. google konnte mir leider nicht wirklich helfen, gimp scheint mir overkill (und ich glaube nicht, dass das ohne herumklicken geht). vielleicht weiss ja von euch wer was...
thx
ich suche ein commandline-tool mit dem ich die farbe eines beliebigen pixels aus einer bilddatei (primär jpg, unterstützung für andere formate wäre auch fein) ermitteln kann. google konnte mir leider nicht wirklich helfen, gimp scheint mir overkill (und ich glaube nicht, dass das ohne herumklicken geht). vielleicht weiss ja von euch wer was...
thx
genau, z.b. so:
ist dir fad? willst du sowas coden?
Code: Alles auswählen
$ colorpick -x 100 -y 100 image.jpg
#FFFFFF
Ich denke, sowas könnte man mit den NetPBM-Tools leicht frickeln.. einfach nach PPM wandeln (man ppm beschreibt das Format) und die Ausgabe an awk pipen.
Edit: oder mit pnmcut ein 1-Pixel-Rechteck rausschneiden und dann dessen RGB-Werte ausgeben.
Edit: hmm.. die Pixel werden als Binärdaten repräsentiert.. das ist nicht schwer zu parsen aber auch nicht mehr komplett trivial..
Edit: ah, es gibt also doch ein "plain PNM" Format das reines ASCII ist, wie ich schon dachte.. man pnmtoplainpnm
Ich weiss nicht, wie das auf Grau- oder Schwarzweissbilder reagieren wird, aber das sollte so passen.
Edit: oder mit pnmcut ein 1-Pixel-Rechteck rausschneiden und dann dessen RGB-Werte ausgeben.
Edit: hmm.. die Pixel werden als Binärdaten repräsentiert.. das ist nicht schwer zu parsen aber auch nicht mehr komplett trivial..
Edit: ah, es gibt also doch ein "plain PNM" Format das reines ASCII ist, wie ich schon dachte.. man pnmtoplainpnm
Code: Alles auswählen
printf "%02x%02x%02x\n" $([br] jpegtopnm unix.jpg 2> /dev/null |[br] pnmcut -left [red]100[/red] -top [red]100[/red] -width 1 -height 1 |[br] pnmtoplainpnm |[br] tr -s '[[:space:]]' ' ' |[br] cut -d' ' -f 5-7[br])
wow! danke sehr, das scheint meinen wunsch zu erfüllen. ich hab selber auch ein bisschen herumgespielt und bin zu folgendem ansatz gekommen:
mit dem noch zu lösenden formatproblem. "100" repräsentiert die spalte, dann folgen die rgb werte in dezimal. wie ich die auf hex konvertieren soll weiss ich auf die schnelle nicht, aus man hexdump werde ich auch nicht ganz schlau.
obwohls dank deiner hilfe nicht mehr nötig ist, würde es mich doch interessieren wie man meine ausgabezeile auf "ebf4fb" übersetzt...
thx nochmal!
Code: Alles auswählen
$ jpegtopnm --quiet unix.jpg|pamslice -column=100|egrep ^100
100 235 244 251
obwohls dank deiner hilfe nicht mehr nötig ist, würde es mich doch interessieren wie man meine ausgabezeile auf "ebf4fb" übersetzt...
thx nochmal!
taddaaaaaa! dank meiner abschreibkünste hab ichs geschafft
edit: beim egrep noch '' und leerzeichen nach 100 hinzugefügt, da sonst evtl. mehrfachmatches.
Code: Alles auswählen
printf "%02x%02x%02x\n" $(jpegtopnm --quiet unix.jpg|pamslice -column=100 |egrep '^100 '|cut -d' ' -f 2-4)
edit: beim egrep noch '' und leerzeichen nach 100 hinzugefügt, da sonst evtl. mehrfachmatches.
Nett. Bei mir sind die Manpages nicht vollständig, deswegen habe ich pamslice nicht gefunden.
Aber wenn's'd' schon grep nimmst, konnst glei' awk nehma.
Aber wenn's'd' schon grep nimmst, konnst glei' awk nehma.
Code: Alles auswählen
jpegtopnm --quiet unix.jpg | pamslice -column 100 | awk '/^100 /{ printf "%02x%02x%02x\n", $2, $3, $4 }'
aha. danke für die erklärung.
jetzt hab ich aber noch so eine frage: wie kann ich aus einem directory mit files eine random-file herauspicken? ich habe mir folgenden ansatz überlegt:
dabei fehlt mir aber die möglichkeit $random zu ermitteln, was ich so erledigen wollte:
nimm ein/mehrere byte/s von /dev/urandom und wandle sie zu einer zahl um (vllt. mittels printf?) et voilà: die zeilennummer.
bin ich da komplett falsch? printf "02d" $(head -c 1 /dev/urandom) funzt leider nicht (und ich gebe zu, dass ich keine ahnung von der printf syntax habe )
jetzt hab ich aber noch so eine frage: wie kann ich aus einem directory mit files eine random-file herauspicken? ich habe mir folgenden ansatz überlegt:
Code: Alles auswählen
ls $dir| head -n $random|tail -n 1
nimm ein/mehrere byte/s von /dev/urandom und wandle sie zu einer zahl um (vllt. mittels printf?) et voilà: die zeilennummer.
bin ich da komplett falsch? printf "02d" $(head -c 1 /dev/urandom) funzt leider nicht (und ich gebe zu, dass ich keine ahnung von der printf syntax habe )
Du musst auf jeden Fall die Daten komplett einlesen -- vorher weisst du nicht, wieviele Zeilen das sind. Für eine Lösung mit reinen Shell-Mitteln fällt mir dazu nur sort ein, das ist ziemlich umständlich:
Ich würde das mit Perl lösen..
Bzw
Code: Alles auswählen
ls "$dir" | while read LINE ; do[br] echo "$RANDOM $LINE"[br]done | sort -sn | head -1 | cut -d' ' -f2-
Code: Alles auswählen
perl -le'opendir $_, $ARGV[0] ||= "." or die "Failed opening directory $ARGV[0]: $!\n"; @_ = readdir $_; print @_[ rand @_ ]' "$dir"
Code: Alles auswählen
#!/usr/bin/perl[br]use strict;[br]use warnings;[br][br]my $dir = shift || ".";[br]my @file = do {[br] opendir my $dh, $dir[br] or die "Couldn't open directory $dir: $!\n"[br] readdir $dh;[br]};[br][br]print $file[ rand @file ], "\n"
wow. ich komm ja aus dem staunen nicht mehr raus ich wäre ja nie draufgekommen, dass die bash eine variable $RANDOM anbietet... aber sehr gut zu wissen. vielleicht sollte ich mir doch einmal die ganze manpage durchlesen (ferien vorausgesetzt). von perl hab ich leider -0 plan, werds trotzdem mal probieren.
thx
p.s. hab mich jetzt doch für die umständliche sortvariante entschieden, da ich die verstehe und anpassen kann
wenns wen interessiert für was ich das brauche: ich habe ein directory voll mit nichtlustig.de cartoons und dank meinem neuen script kann ich mir jetzt mittels stündlichem cronjob einen neuen desktop generieren lassen wo jeweils ein cartoon in der mitte ist und die hintergrundfarbe passend gesetzt wird.
wenns jemand haben will, hier das script (benötigt netpbm (http://netpbm.sourceforge.net/) und hsetroot (http://thegraveyard.org/hsetroot.php)):
p.p.s. irgendwie mag das forum (zumindest in der vorschau) nicht mehr als einen schönen link anzeigen... hat sonst noch wer das problem?
thx
p.s. hab mich jetzt doch für die umständliche sortvariante entschieden, da ich die verstehe und anpassen kann
wenns wen interessiert für was ich das brauche: ich habe ein directory voll mit nichtlustig.de cartoons und dank meinem neuen script kann ich mir jetzt mittels stündlichem cronjob einen neuen desktop generieren lassen wo jeweils ein cartoon in der mitte ist und die hintergrundfarbe passend gesetzt wird.
wenns jemand haben will, hier das script (benötigt netpbm (http://netpbm.sourceforge.net/) und hsetroot (http://thegraveyard.org/hsetroot.php)):
Code: Alles auswählen
#!/bin/bash
DIR="/mnt/Storage/Pictures/www.nichtlustig.de/"
PIC=$DIR$(ls $DIR |while read LINE ; do echo "$RANDOM $LINE" ; done | sort -sn | head -n 1 | cut -d' ' -f2-)
COLOR=$(jpegtopnm --quiet $PIC | pamslice -column=2 | awk '/^2 /{ printf "%02x%02x%02x\n", $2, $3, $4 }')
hsetroot -solid \#$COLOR -center $PIC