PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : jpgbilder verkleinern



oyster-manu
19.07.2004, 14:33
ich habe einen ordner voll mit bildern die alle "italien[1-1000].jpg" heissen.
da sie mit einer digitalkamera aufgenommen wurden sind alle sehr groß.
nun möchte ich aber alle bilder auf eine auflösung von 640*480 pixeln bringen und das möglichst automatisch.

mein problem ist, dass ich nicht viel ahnung von shellscripten habe, hat also jemand einen lösungsansatz?

DaMutz
19.07.2004, 14:37
genau das habe ich gestern auch gebraucht
http://www.linux-user.de/ausgabe/2002/07/084-zubefehl/convert.html

es ist ein programm von der imagemagick sammlung

hehejo
19.07.2004, 14:37
Hier im Forum gibt's schon Threads dazu!
http://www.unixboard.de/vb3/showthread.php?t=2561
http://www.unixboard.de/vb3/showthread.php?t=8004

oyster-manu
19.07.2004, 15:58
ohh vielen dank. in zukunft sollte ich wohl doch mal erst die suchfunktion benutzen.

oyster-manu
20.07.2004, 15:54
ich habe mir nun dieses script zusammengeschustert:


#!/bin/sh

echo "---START RESIZING---"
echo "this may take some time"

for i in *.jpg
do
convert $i -geometry 640x480\! ~/klein_pics/`basename $i .jpg`_klein.jpg
done

echo "---RESIZING FINISHED---"

allerdings habe ich noch ein paar fragen dazu.

1. geht die shell erst das verzeichnis nach *.jpg-dateien durch und merkt sich dann deren anzahl oder wird erst eine jpg-datei erfasst und dann die do-funktion ausgeführt usw.? bei letzterem müsste es doch dann vorkommen, dass das script eine endlosschleife wird falls man die veränderten jpg-dateien im selben ordner wie die ausgangs jpg-dateien speichern lässt, da immer neue jpg-dateien hinzukommen.

2. wofür steht das "\!"? in dem artikel (s.o.) stand was von maskieren. was heisst das?

3. warum muss basename $i.jpg angegeben werden? reicht nicht basename $i aus?
so wie es da steht müsste doch die endgültige datei so heissen: "bild001.jpg_klein.jpg"
tatsächlich heissen sie aber "bild001_klein.jpg"

DaMutz
23.07.2004, 15:36
das 1. wird wohl schon so sein dass es keine endlosschleife gibt, also zuerst einlesen und dann verarbeiten
2. ?
3. dass basename wird wegen den ` ja zuerst ausgeführt und laut man basename wird eine angehängter suffix gelöscht also das jpg wird weggelöscht durch das basename, der rest des namen bleibt erhalt und wird durch _klein.jpg ergänzt

oyster-manu
23.07.2004, 23:38
vielen dank für deine antwort. ich war schon kurz davor einen neuen thread anzufangen weil keiner geantwortet hat (es passte auch nicht zum topic).

bei frage 2 meinte ich das "\!" hinter dem -geometry 640x480


convert $i -geometry 640x480\! ~/klein_pics/`basename $i .jpg`_klein.jpg

DaMutz
24.07.2004, 19:01
ich habe beim 2 ein Fragezeichen gemacht weil ich die Antwort nicht wusste, nicht weil die Frage schlecht gestellt war.
Ich habe den Artikel nochmals gelesen und denke da ist die Lösung

Ein Bild in der Ausgangsgröße 320x200 wird mit -geometry 640x480 daher auf 640x400 skaliert. Das Seitenverhältnis bleibt gleich, und 80 Pixel bleiben gewissermaßen "übrig". Soll die volle Fläche ausgenutzt werden (um den Preis, dass das Bild verzerrt wird), verwenden Sie -geometry 640x480! (mit einem Ausrufezeichen dahinter).
Das ! ist da damit das Bild wirklich diese Grösse annimmt, mit evtl verzerrungen. Ohne ! wird dass Bild auf den einten Wert skaliert.

oyster-manu
26.07.2004, 18:13
danke.
weisst du auch warum das ! erst maskiert werden musste (per \) ?

etuli
26.07.2004, 18:15
vermutlich weil in der shell programmierung das ! eine negation darstellt.