• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Bilder mit Konsolenbefehl konvertieren

So ich hoffe ich mach jetzt hier nich alles falsch, falls das doch in ein anderes Forum gehört bitte verschieben...

Ich nutze erst seit kurzen Linux Suse, also nich wundern, wenn ich dumme Fragen stelle.... ;)

Mein Problem ist folgendes: Ich mache recht viele Fotos mit meiner Digitalkamera und möchte etliche davon auch in eine Gallery ins Internet stellen, dann sollten sie aber nich mehr 1-2 mb und 3 mega pixel groß sein. Wenn ich sie mit Gimp skalliere, werden sie kleiner, auch die Dateigröße, aber das dauert bei vielen Fotos doch recht lange, vorallem, die Ladezeiten bei Gimp sind bei meinem alten Rechner lelativ lange.
Ich hab jetzt zwar endlich den Konsolenbefehl gefunden, mit dem ich schnell und unproblematisch einzelne jpg-Dateien convertieren kann:

convert Dateiname1.jpg - resize 800x600 Dateiname2.jpg


Bis jetzt spar ich mir durch den Befehl allerdings nur die ganze Gimp-Ladezeit...

ist es denn auch möglich, mit einem Befehl alle jpg-Dateien innerhalb eines Verzeichnisses auf einmal zu konvertieren? Kann man den einzelnen spezifischen Dateinamen durch gewisse Angaben ersetzen, so das alle jpg-Dateien in dem Ordner erfasst werden?

Weiteres Problem ist die Dateigröße, die Bilder sind immer noch bis zu 2 mb groß, auch nach dem konvertieren

Wenn ich bei "Dateiname2.jpg" einfach die Endung ".jpg" weglasse werden die Bilder auch von der Dateigröße her kleiner. Ist es denn ein großes Problem, wenn ich die endung ".jpg" weglasse? In "Dateieigentschaften werden sie immer noch als jpeg-dateien erkannt und auch mit Gimp kann ich sie noch öffnen.

Mfg Jens
 

cero

Guru
jens_the_newbie schrieb:
ist es denn auch möglich, mit einem Befehl alle jpg-Dateien innerhalb eines Verzeichnisses auf einmal zu konvertieren?
Für das skalieren von Bildern in einem Verzeichnis kannst Du hier gucken:
http://www.linux-club.de/viewtopic.php?t=13139
 

TeXpert

Guru
jens_the_newbie schrieb:
Bis jetzt spar ich mir durch den Befehl allerdings nur die ganze Gimp-Ladezeit...
wie willst Du Dir denn auch das umrechen sparen ;)

Weiteres Problem ist die Dateigröße, die Bilder sind immer noch bis zu 2 mb groß, auch nach dem konvertieren
Stichwort Quality, man convert

Wenn ich bei "Dateiname2.jpg" einfach die Endung ".jpg" weglasse werden die Bilder auch von der Dateigröße her kleiner. Ist es denn ein großes Problem, wenn ich die endung ".jpg" weglasse? In "Dateieigentschaften werden sie immer noch als jpeg-dateien erkannt und auch mit Gimp kann ich sie noch öffnen.

es ist ja auch immer noch ein jpeg, allerdings kann nciht jeder Viewer auf alternativen Betriebssystemen mit der entsprechenden magic-number umgehehn...[/quote]
 
Probier es mal so:
Code:
#!/bin/sh
for i in *.jpg ; do
   convert $i -resize 800x600! -quality 75 $(basename $i .jpg).klein.jpg
done
- so wird zu jeder Datei, die auf .jpg endet, eine neue Datei geschrieben, die auf .klein.jpg endet; die Dateinamen kann man hinterher weiter anpassen
- jedes Bild wird auf genau 800 Pixel Breite und 600 Pixel Höhe skaliert; wenn Du es anders, z.B. prozentual haben willst, schau hier:

http://www.imagemagick.org/script/command-line-options.php#resize

- spiel mit der Qualitätsangabe rum, so dass es passt und noch gut aussieht; 75 ist schon relativ wenig:

http://www.imagemagick.org/script/command-line-options.php#quality
 
ich versteh nicht, warum das ganze bei mir nicht funktioniert....

die Dateien sind vorhanden:
Code:
jens@jens:~> ls /home/jens/Duisburg
imag0001.jpg  imag0015.jpg  imag0027.jpg  imag0039.jpg  imag0050.jpg
imag0002.jpg  imag0016.jpg  imag0028.jpg  imag0040.jpg  imag0051.jpg
imag0003.jpg  imag0017.jpg  imag0029.jpg  imag0041.jpg  imag0052.jpg
imag0005.jpg  imag0019.jpg  imag0030.jpg  imag0042.jpg  imag0053.jpg
imag0008.jpg  imag0020.jpg  imag0031.jpg  imag0043.jpg  imag0055.jpg
imag0009.jpg  imag0021.jpg  imag0032.jpg  imag0044.jpg  imag0056.jpg
imag0010.jpg  imag0022.jpg  imag0033.jpg  imag0045.jpg  imag0057.jpg
imag0011.jpg  imag0023.jpg  imag0034.jpg  imag0046.jpg  imag0058.jpg
imag0012.jpg  imag0024.jpg  imag0035.jpg  imag0047.jpg  imag0059.jpg
imag0013.jpg  imag0025.jpg  imag0037.jpg  imag0048.jpg  mpg_0018.mpg
imag0014.jpg  imag0026.jpg  imag0038.jpg  imag0049.jpg

wenn ich nun die von euch genannten Befehle eintippe, bekomme ich immer folgende fehlermeldungen:
Code:
jens@jens:~> #!/bin/sh
bash: !/bin/sh: event not found
jens@jens:~> for i in /home/jens/Duisburg *.jpg
> do
> convert $i -resize 1024x768! -quality 80 $(basename $i .jpg).klein.jpg
> done
convert: Empty input file (/home/jens/Duisburg).
convert: Unable to open file (*.jpg).

Code:
jens@jens:~> #!/bin/sh
bash: !/bin/sh: event not found
jens@jens:~> for pic in `ls /home/jens/Duisburg *.jpg`; do convert -verbose $pic -scale 1024x1024 $pic; done
/bin/ls: *.jpg: Datei oder Verzeichnis nicht gefunden
convert: Unable to open file (/home/jens/Duisburg:).
convert: Unable to open file (imag0001.jpg).
convert: Unable to open file (imag0002.jpg).
convert: Unable to open file (imag0003.jpg).

vielen Dank für eure Hilfe, wahrscheinlich stell ich mich einfach nur zu dumm an....
aber ich bin halt Anfänger und würd mich freuen, wenn ihr mir trotzdem helft... ;)
 
Also erstmal: Dieses "#!/bin/sh" leitet Shell-Scripts ein und wird nur benötigt, wenn Du die Befehle in einer Datei abspeicherst, die Du dann ausführbar machst und ausführst. Wenn Du die Befehle direkt eingibst, brauchst Du es nicht.

Zum anderen: Du willst alle *.jpg-Bilder im Verzeichnis "/home/jens/Duisburg" umwandeln. Das sind die Dateien, auf die das Muster "/home/jens/Duisburg/*.jpg" passt - die Bedeutung von "/home/jens/Duisburg *.jpg" hat TeXpert schon erläutert.

Probier es mal so:
Code:
for i in /home/jens/Duisburg/*.jpg ; do
   convert $i -parameter1 -parameter2 $(basename $i .jpg).klein.jpg
done
Für "-parameter1" und "-parameter2" setzt Du ein, was Du mit Deinen Dateien machen willst. Das "$(basename $i .jpg).klein.jpg" ist empfehlenswert, weil es zu jeder Datei eine Ausgabedatei erstellt, anstatt die Eingabedatei zu überschreiben.
 
Oben