Hallo zusammen, gegeben sind jpg's gleicher Groesse und ein transparentes png je Copyright in gleicher Groesse. In einem Script moechte ich jedes/alle/ein jpg mit dem jeweiligen, transparenten png ueberlagern. Das klappt auch prima mit composite. Jetzt moechte ich das png gern als Ressource im Script hinterlegen und dazu fehlt mir ein konkreter Anhaltspunkt. Das png muss ich vermutlich byteweise als hex in eine Variable einlesen. Aber wie voll darf ich eine Variable ueberhaupt packen? Mein erstes Test-png ist 15286 Byte gross. Wer hat an sowas schonmal gebastelt und kann mir auf die Spruenge helfen? Besten Dank! MfG Th. Moritz -- Suche fuer meinen TV "52LG7000" eine Firmware mit einer "vernuenftigen" Diashow. Die letzte offizielle Firmware "V3.27" von LG brachte keine Besserung! -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Hallo, Am Son, 26 Sep 2010, Thomas Moritz schrieb:
gegeben sind jpg's gleicher Groesse und ein transparentes png je Copyright in gleicher Groesse. In einem Script moechte ich jedes/alle/ein jpg mit dem jeweiligen, transparenten png ueberlagern. Das klappt auch prima mit composite. Jetzt moechte ich das png gern als Ressource im Script hinterlegen und dazu fehlt mir ein konkreter Anhaltspunkt.
Enthält das PNG irgendwelche Besonderheiten? Sonst könntest du das Copyright einfach per convert einfügen: convert \ -font "helvetica" \ -pointsize 18 \ -fill black \ -draw "text 15,30 'Copyright bla blubb' \ -comment "Copyright bla blubb" foo.jpg foo_out.jpg
Das png muss ich vermutlich byteweise als hex in eine Variable einlesen. Aber wie voll darf ich eine Variable ueberhaupt packen? Mein erstes Test-png ist 15286 Byte gross.
Wer hat an sowas schonmal gebastelt und kann mir auf die Spruenge helfen?
Lege das PNG base64 kodiert in ner Variablen (oder per Here-Dokument) ab. Oder nach nem Marker am Scriptende (vgl. shar-selbstentpackende Archive). uuencode -m foo.png.uu < foo.png generiert dir den das uu-kodierte PNG, verwenden kannst du's dann mit uudecode. Also z.B.: FOO_PNG_UU='begin-base64 644 foo.png iVBORw0KGgoAAAANSUhEUgAAAcAAAABpEAIAAABys7j1AAAACW9GRnMAAAB7 ... ==== ' (in den '' steht die Ausgabe von uuencode -m). und dann: echo "$FOO_PNG_UU" | uudecode -o - | composite bar.jpg ... png:- ... wobei du die restlichen Optionen statt der '...' ergänzen mußt und das png:- composite angibt welchen Typ das per STDIN zu lesende Bild hat. "Eingebettet" im Script statt ner Variablen könnte das evtl. so gehen (nur Idee, ungetestet): ==== FOO_PNG_UU="$(sed -n "/BEGIN_FOO_PNG_UU/,/END_FOO_PNG_UU/p')" [Rest vom script] exit 0 BEGIN_FOO_PNG_UU begin-base64 644 foo.png iVBORw0KGgoAAAANSUhEUgAAAcAAAABpEAIAAABys7j1AAAACW9GRnMAAAB7 ... ==== END_FOO_PNG_UU BEGIN_BAR_PNG_UU begin-base64 644 bar.png ... END_FOO_PNG_UU ==== HTH, -dnh -- Optimist: There is a light at the end of the tunnel. Pessimist: ... it is an oncoming train. Cynic: ... and it is late. -- D. C. Staples -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Am Sonntag, 26. September 2010 18:10:37 schrieb David Haller: Hallo David,
Am Son, 26 Sep 2010, Thomas Moritz schrieb:
gegeben sind jpg's gleicher Groesse und ein transparentes png je Copyright in gleicher Groesse. In einem Script moechte ich jedes/alle/ein jpg mit dem jeweiligen, transparenten png ueberlagern. Das klappt auch prima mit composite. Jetzt moechte ich das png gern als Ressource im Script hinterlegen und dazu fehlt mir ein konkreter Anhaltspunkt.
Enthält das PNG irgendwelche Besonderheiten?
Nein, ich moechte keine Botschaften uebermittlen :-) Momentan besteht das PNG aus einem simplen Rahmen und dem (c). Der Rahmen soll allerdings irgendwann etwas aufwendiger werden. Bilder von einem Bekannten muss ich mit "Mit freundlicher Genehmigung..." und meinem Rahmen ueberlagern.
Sonst könntest du das Copyright einfach per convert einfügen:
convert \ -font "helvetica" \ -pointsize 18 \ -fill black \ -draw "text 15,30 'Copyright bla blubb' \ -comment "Copyright bla blubb" foo.jpg foo_out.jpg
Ja, das waren meine ersten Versuche. Der 2. Hintergrund ist Ordnung im System. Einen weiteren Ordner mit Schnipseln moechte ich mir sparen. Ich musste letztens erst meine alten DAT-Baender durchforsten, weil ein alter, aufwendiger Schnipsel irgendein Backup nicht ueberlebt hat. (irgendwann als unwichtig abgestempelt und nicht mitgesichert) Haette die Kodierung im Script gestanden, waere sie auch heute noch genau dort :-(
"Eingebettet" im Script statt ner Variablen könnte das evtl. so gehen (nur Idee, ungetestet):
==== FOO_PNG_UU="$(sed -n "/BEGIN_FOO_PNG_UU/,/END_FOO_PNG_UU/p')"
[Rest vom script] exit 0
BEGIN_FOO_PNG_UU begin-base64 644 foo.png iVBORw0KGgoAAAANSUhEUgAAAcAAAABpEAIAAABys7j1AAAACW9GRnMAAAB7 ... ==== END_FOO_PNG_UU
BEGIN_BAR_PNG_UU begin-base64 644 bar.png ... END_FOO_PNG_UU ====
Das ist genau die Richtung! Super Idee! Besten Dank! Ab Mitte der kommenden Woche werde ich das umsetzen. Bei ernsthaften Problemen werde ich mich nochmal melden. MfG Th. Moritz -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Am Sonntag, 26. September 2010 18:10:37 schrieb David Haller: Hallo David, ich habe jetzt einen Schnellschuss zusammengeklappert. Ich lege das PNG also in eine Variable und wegen der Uebersichtlichkeit benutze ich eine Function :-) Kannst ja mal ueber grobe Schnitzer meckern... Die Abfrage, ob es bereits ein Bild mit Rahmen zu dem normalen JPG gibt, muss ich noch an den Anfang legen. --------------------------------------------------------------------- #!/bin/sh #set -xv trap "rm -f /dev/shm/thm____.____.png" SIGINT cd "$PWD" machwas(){ #Das PNG nach /dev/shm schreiben und erst dann an composite uebergeben #spart pro Durchlauf uudecode RFILE="/dev/shm/thm____.____.png" echo "$RAHMEN" | uudecode -o - > "$RFILE" find -type f -name '*.[jJ][pP][gG]' | while read -r FILE; do #Files mit Rahmen __R.JPG nicht nochmal bearbeiten if ! test `echo "$FILE" | grep "__R.JPG"`; then echo "Bearbeite $FILE" #Filenamen in Grossbuchstaben aendern UPPERFILE=`echo "$FILE" | tr '[[:lower:]]' '[[:upper:]]'` if ! test -e "$UPPERFILE"; then mv "$FILE" "$UPPERFILE" fi NEWFILE=`basename "$UPPERFILE" .JPG`"__R.JPG" if test -e "$NEWFILE"; then echo ">>> $NEWFILE existiert, es wird kein Rahmen hinzugefuegt" else composite "$RFILE" "$UPPERFILE" "$NEWFILE" fi fi done # temporaeres PNG loeschen rm -f "$RFILE" } RAHMEN="begin-base64 644 rahmen_mori.png.uu iVBORw0KGgoAAAANSUhEUgAAB4AAAAQ4CAYAAADo08FDAAAAAXNSR0IArs4c ... ====" machwas exit 0 --------------------------------------------------------------------- MfG Th. Moritz -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Hallo, Am Mit, 29 Sep 2010, Thomas Moritz schrieb:
Am Sonntag, 26. September 2010 18:10:37 schrieb David Haller: ich habe jetzt einen Schnellschuss zusammengeklappert. Ich lege das PNG also in eine Variable und wegen der Uebersichtlichkeit benutze ich eine Function :-) Kannst ja mal ueber grobe Schnitzer meckern...
Nix grobes.
Die Abfrage, ob es bereits ein Bild mit Rahmen zu dem normalen JPG gibt, muss ich noch an den Anfang legen.
#!/bin/sh
Muß das /bin/sh, also portabel sein, oder darf's auch bash sein? (wobei zsh und ksh müßten das, was ich vorschlage, ebenfalls verarbeiten können.
#set -xv trap "rm -f /dev/shm/thm____.____.png" SIGINT ^^^ das SIG-Präfix ist nicht portabel
Besser mit mktemp die Temporärdatei erzeugen: RFILE=$(mktemp /dev/shm/thmXXXXXX.png) trap "rm -f $RFILE" HUP INT TERM EXIT Und beides evtl. innerhalb der Funktion.
cd "$PWD"
Wozu das?
machwas(){ #Das PNG nach /dev/shm schreiben und erst dann an composite uebergeben #spart pro Durchlauf uudecode
RFILE="/dev/shm/thm____.____.png"
Das entfällt dann.
echo "$RAHMEN" | uudecode -o - > "$RFILE"
Da hättest du nachgucken sollen, was die Option '-o' macht ;) echo "$RAHMEN" | uudecode -o "$RFILE"
find -type f -name '*.[jJ][pP][gG]' | while read -r FILE; do
find -type f -iname '*.jpg' | while read -r FILE; do
#Files mit Rahmen __R.JPG nicht nochmal bearbeiten if ! test `echo "$FILE" | grep "__R.JPG"`; then
Useless use of echo. Den Exitcode bekommst du auch direkt von grep. Und das grep sollte man "verankern": grep '__R.JPG$'. if ! echo "$FILE" | grep -q "__R.JPG$"; then Aber sinnvoller ist glaub eh: case $FILE in *__R.JPG) continue;; esac ODER if test "$FILE" = "${FILE%%__R.JPG}"; then
echo "Bearbeite $FILE" #Filenamen in Grossbuchstaben aendern UPPERFILE=`echo "$FILE" | tr '[[:lower:]]' '[[:upper:]]'`
UPPERFILE="$(echo "$FILE" | tr '[[:lower:]]' '[[:upper:]]')"
if ! test -e "$UPPERFILE"; then mv "$FILE" "$UPPERFILE" fi
Was ist, wenn $UPPERFILE existiert?
NEWFILE=`basename "$UPPERFILE" .JPG`"__R.JPG"
NEWFILE="${UPPERFILE/%%.JPG}__R.JPG"
if test -e "$NEWFILE"; then echo ">>> $NEWFILE existiert, es wird kein Rahmen hinzugefuegt" else composite "$RFILE" "$UPPERFILE" "$NEWFILE" fi fi done
# temporaeres PNG loeschen rm -f "$RFILE"
Gleich mit von 'trap' erledigen lassen ;)
}
RAHMEN="begin-base64 644 rahmen_mori.png.uu iVBORw0KGgoAAAANSUhEUgAAB4AAAAQ4CAYAAADo08FDAAAAAXNSR0IArs4c ... ===="
machwas exit 0
MfG Th. Moritz
Schaut aber schon gut aus ;) -dnh -- Wurst: an der Verwesung verhinderte Leichenteile ermordeter Tiere, teilweise in deren eigene Kotkanäle gefülllt. -- Konni Scheller in <1fs4qd1.tndes08fuvb2N%ein_konni@gmx.de> -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Am Mittwoch, 29. September 2010 20:10:07 schrieb David Haller: Hallo,
#!/bin/sh
Muß das /bin/sh, also portabel sein, oder darf's auch bash sein? (wobei zsh und ksh müßten das, was ich vorschlage, ebenfalls verarbeiten können.
Eigentlich sollte '#!/bin/bash' ausreichen!
#set -xv trap "rm -f /dev/shm/thm____.____.png" SIGINT
^^^ das SIG-Präfix ist nicht portabel
Uuups, wieder was gelernt!
Besser mit mktemp die Temporärdatei erzeugen:
RFILE=$(mktemp /dev/shm/thmXXXXXX.png) trap "rm -f $RFILE" HUP INT TERM EXIT
mktemp will die Extension definieren und nicht den basename! echo "$SHELL" /bin/bash mktemp -V mktemp (GNU coreutils) 7.1 Also: RFILE=$(mktemp /dev/shm/mypng.XXXXXX) Gut, dann muesste ich in composite wieder png: benutzen. [***was anderes***] Andererseits liegt seit dem letzten Kernelupdate _und_ dem anschliessenden Reboot noch ein suse-Schnipsel im shm :-( initrd_exports.sh ---------------------------------------------------- declare -x HOME="/" declare -x OLDPWD="/" declare -x PATH="/sbin:/usr/sbin:/bin:/usr/bin" declare -x PWD="/root" declare -x ROOTFS_BLKDEV="/dev/disk/by-id/ata-WDC*-part6" declare -x ROOTFS_FSCK="0" declare -x ROOTFS_FSTYPE="ext4" declare -x SHLVL="1" declare -x TERM="linux" declare -x splash="silent" declare -x vga="0x317" ---------------------------------------------------- Wenn ich es nicht zufaellig gesehen haette, laege der beim naechsten Kernelupdate auch noch rum... (s2ram-Kiste). [***was anderes***]
Und beides evtl. innerhalb der Funktion.
cd "$PWD"
Wozu das?
Ich springe vorsichtshalber zu meinem BaseDir :-) Bei aufwendigen Sachen merke ich mir MYDIR="$PWD" und kann nach diversen Ausfluegen schnell wieder zur Basis zurueck. cd "$MYDIR"
echo "$RAHMEN" | uudecode -o - > "$RFILE"
Da hättest du nachgucken sollen, was die Option '-o' macht ;)
Hand an die Stirn klatsch! Es ist so augenscheinlich und trotzdem habe ich gepennt!
find -type f -name '*.[jJ][pP][gG]' | while read -r FILE; do
find -type f -iname '*.jpg' | while read -r FILE; do
-iname ...klar doch!
if ! echo "$FILE" | grep -q "__R.JPG$"; then
Aber sinnvoller ist glaub eh:
case $FILE in *__R.JPG) continue;; esac
ODER
if test "$FILE" = "${FILE%%__R.JPG}"; then
Beides gut, case gefaellt mir besser, da schnell und uebersichtlich erweiterbar.
echo "Bearbeite $FILE" #Filenamen in Grossbuchstaben aendern UPPERFILE=`echo "$FILE" | tr '[[:lower:]]' '[[:upper:]]'`
UPPERFILE="$(echo "$FILE" | tr '[[:lower:]]' '[[:upper:]]')"
Am Ergebnis aendert sich nichts. Worin liegt der Vorteil?
if ! test -e "$UPPERFILE"; then mv "$FILE" "$UPPERFILE" fi
Was ist, wenn $UPPERFILE existiert?
Dann braucht $FILE nicht umbenannt zu werden und weiter geht's im Script.
NEWFILE=`basename "$UPPERFILE" .JPG`"__R.JPG"
NEWFILE="${UPPERFILE/%%.JPG}__R.JPG"
Noe, das will ich nicht! UPPERFILE="ABC.JPG" NEWFILE="${UPPERFILE/%%.JPG}__R.JPG" echo "$NEWFILE" ABC.JPG__R.JPG <<<-----Noe!
# temporaeres PNG loeschen rm -f "$RFILE"
Gleich mit von 'trap' erledigen lassen ;)
OK! Ich danke Dir vielmals fuer Deine Muehe! MfG Th. Moritz -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Hallo, Am Don, 30 Sep 2010, Thomas Moritz schrieb:
Am Mittwoch, 29. September 2010 20:10:07 schrieb David Haller:
#!/bin/sh
Muß das /bin/sh, also portabel sein, oder darf's auch bash sein? (wobei zsh und ksh müßten das, was ich vorschlage, ebenfalls verarbeiten können.
Eigentlich sollte '#!/bin/bash' ausreichen!
Jup.
#set -xv trap "rm -f /dev/shm/thm____.____.png" SIGINT
^^^ das SIG-Präfix ist nicht portabel
Uuups, wieder was gelernt!
Besser mit mktemp die Temporärdatei erzeugen:
RFILE=$(mktemp /dev/shm/thmXXXXXX.png) trap "rm -f $RFILE" HUP INT TERM EXIT
mktemp will die Extension definieren und nicht den basename!
Ah, ja, stimmt. Ganz vergessen.
Also: RFILE=$(mktemp /dev/shm/mypng.XXXXXX) Gut, dann muesste ich in composite wieder png: benutzen.
Ja.
[***was anderes***] Andererseits liegt seit dem letzten Kernelupdate _und_ dem anschliessenden Reboot noch ein suse-Schnipsel im shm :-(
Hm, bei mir is nix drin (Kernelupdate vorgestern).
Und beides evtl. innerhalb der Funktion.
cd "$PWD"
Wozu das?
Ich springe vorsichtshalber zu meinem BaseDir :-) Bei aufwendigen Sachen merke ich mir MYDIR="$PWD" und kann nach diversen Ausfluegen schnell wieder zur Basis zurueck. cd "$MYDIR"
Aber 'cd "$PWD"' ändert ja nix, du bleibst wo du bist.
echo "Bearbeite $FILE" #Filenamen in Grossbuchstaben aendern UPPERFILE=`echo "$FILE" | tr '[[:lower:]]' '[[:upper:]]'`
UPPERFILE="$(echo "$FILE" | tr '[[:lower:]]' '[[:upper:]]')"
Am Ergebnis aendert sich nichts. Worin liegt der Vorteil?
Geschmackssache ;)
if ! test -e "$UPPERFILE"; then mv "$FILE" "$UPPERFILE" fi
Was ist, wenn $UPPERFILE existiert?
Dann braucht $FILE nicht umbenannt zu werden und weiter geht's im Script.
Ah, dann passts.
NEWFILE=`basename "$UPPERFILE" .JPG`"__R.JPG"
NEWFILE="${UPPERFILE/%%.JPG}__R.JPG"
Noe, das will ich nicht! UPPERFILE="ABC.JPG" NEWFILE="${UPPERFILE/%%.JPG}__R.JPG" echo "$NEWFILE" ABC.JPG__R.JPG <<<-----Noe!
Mein Fehler. NEWFILE="${UPPERFILE/%.JPG/}__R.JPG" HTH, -dnh -- There is a green, multi-legged creature crawling on your shoulder. -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Am Donnerstag, 30. September 2010 20:31:29 schrieb David Haller: Hallo,
cd "$PWD"
Wozu das?
Ich springe vorsichtshalber zu meinem BaseDir :-) Bei aufwendigen Sachen merke ich mir MYDIR="$PWD" und kann nach diversen Ausfluegen schnell wieder zur Basis zurueck. cd "$MYDIR"
Aber 'cd "$PWD"' ändert ja nix, du bleibst wo du bist.
Prinzipiell hast Du Recht! Aber... Ich musste irgendwann mal die Erfahrung machen, dass ich nicht im BaseDir war, sondern ganz woanders! Es war eine Link-Geschichte. Link zum Script, oder Link zum BaseDir, weiss jetzt nicht genau! Leider finde ich den Schnipsel auf die Schnelle nicht! Seitdem benutze ich cd "$PWD". Das sollte auch keine negativen Folgen haben. MfG Th. Moritz -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
On Thu, 30 Sep 2010, 22:12:46 +0200, Thomas Moritz wrote:
Am Donnerstag, 30. September 2010 20:31:29 schrieb David Haller:
Hallo,
cd "$PWD"
Wozu das?
Ich springe vorsichtshalber zu meinem BaseDir :-) Bei aufwendigen Sachen merke ich mir MYDIR="$PWD" und kann nach diversen Ausfluegen schnell wieder zur Basis zurueck. cd "$MYDIR"
Aber 'cd "$PWD"' ändert ja nix, du bleibst wo du bist.
Prinzipiell hast Du Recht! Aber... Ich musste irgendwann mal die Erfahrung machen, dass ich nicht im BaseDir war, sondern ganz woanders! Es war eine Link-Geschichte. Link zum Script, oder Link zum BaseDir, weiss jetzt nicht genau! Leider finde ich den Schnipsel auf die Schnelle nicht! Seitdem benutze ich cd "$PWD". Das sollte auch keine negativen Folgen haben.
Stimmt, und ich kann mich auch noch ganz entfernt an aehnliche Probleme erinnern. Die BaSH hat mittels $PWD immer hervorragend Buch darueber gefuehrt, wo man gerade ist - auch trotz Berkeley Automounter - aber /bin/pwd ist da u.U. ganz anderer Ansicht. Ich habe damals (ist jetzt aber tatsaechlich schon 15 Jahre her...) auch solche "cd $PWD" Statements an der richtigen Stelle ins Skript eingebaut.
MfG Th. Moritz
Cheers. l8er manfred -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Moin, Am Mittwoch, 29. September 2010, 20:10:07 schrieb David Haller: [...]
find -type f -iname '*.jpg' | while read -r FILE; do
#Files mit Rahmen __R.JPG nicht nochmal bearbeiten if ! test `echo "$FILE" | grep "__R.JPG"`; then
Useless use of echo. Den Exitcode bekommst du auch direkt von grep. Und das grep sollte man "verankern": grep '__R.JPG$'.
if ! echo "$FILE" | grep -q "__R.JPG$"; then [...]
Useless use of if-then-fi + grep ;-) find -type f -iname '*.jpg' \! -name '*_R.JPG' | while read -r FILE; do cu Jan -- Homepage: http://www.jan-trippler.de -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Hallo Jan!!! Am Mon, 04 Okt 2010, Jan Trippler schrieb:
Am Mittwoch, 29. September 2010, 20:10:07 schrieb David Haller: [...]
find -type f -iname '*.jpg' | while read -r FILE; do
#Files mit Rahmen __R.JPG nicht nochmal bearbeiten if ! test `echo "$FILE" | grep "__R.JPG"`; then
Useless use of echo. Den Exitcode bekommst du auch direkt von grep. Und das grep sollte man "verankern": grep '__R.JPG$'.
if ! echo "$FILE" | grep -q "__R.JPG$"; then [...]
Useless use of if-then-fi + grep ;-)
find -type f -iname '*.jpg' \! -name '*_R.JPG' | while read -r FILE; do
Da siehste mal, wie sehr du mir fehlst! Willkommen zur-Aück!-b -dnh -- Make sure that they know you know that they know you know. -- Mike Andrews on getting license keys by mail (from a certain Corp.) -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
participants (4)
-
David Haller
-
Jan Trippler
-
Manfred Hollstein
-
Thomas Moritz