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

[Tip] Bilder automatisch skalieren --> einfaches Skript

mada

Hacker
Hallo zusammen,

weiter unten in diesem Themenbereich tauchte etwa zweimal die Frage auf, wie man mit Linux Bilder moeglichst komfortabel verkleinern kann.
Es hat auch Antworten gegeben, aber keiner hatte gewusst, dass ImageMagick so schlau ist, das Aspektverhaeltnis der Bilder automatisch beizubehalten. Man muss also nicht erst hochformatige Bilder aussortieren und drehen, resizen und wieder zurueckdrehen, sondern kann direkt auf alle Bilder einen Befehl loslassen.
Ich habe das ganze mittlerweile in einem Skript, das mir alle .jpg Bilder auf 1024px fuer die laengere Seite skaliert und die urspruenglichen Bilder in einen extra Ordner verschiebt. Natuerlich kann mans auch andersrum machen, einfach halt das Skript entsprechend aendern!
Code:
#!/bin/bash
# Bilder skalieren und Dateinamen erweitern
# Ordner fuer die Originale
mkdir Originale
for pic in *.jpg
do
# mit ImageMagick skalieren: laengste Seite 1024px
convert -verbose -quality 75 "$pic" -scale 1024x1024 "R_$pic"
# originale Bilder verschieben
mv $pic Originale/
done
Es ist darauf zu achten, dass die Dateien alle auf .jpg enden muessen. Falls man .JPG, .jpeg, .JPEG usw. hat, muss man halt ebenfalls eine Korrektur des Skripts vornehmen.

Das Skript (wie alle selbstgebauten Skripten!) am besten ins ~/bin-Verzeichnis ablegen und ausfuehrbar machen, dann kann man von ueberall darauf zugreifen!

An dieser Stelle moechte ich dann auch noch bbgallery empfehlen, ein wirklich sensationelles perlskript, mit dem sich topeinfach extrem schicke Bildergalerien erstellen lassen!

http://bbgallery.sourceforge.net/

Per apt laesst es sich auch intstallieren:
apt install bbgallery perl-HTML-Template

glg, Daniel
 

Hermann

Hacker
mada schrieb:
...Es hat auch Antworten gegeben, aber keiner hatte gewusst, dass ImageMagick so schlau ist, das Aspektverhaeltnis der Bilder automatisch beizubehalten...
Code:
...convert -verbose -quality 75 "$pic" -scale 1024x1024 "R_$pic"...
...

Hallo Daniel, wenn man nach "Bilder scalieren" sucht bekommt man:

http://www.linux-club.de/viewtopic.php?t=16194&highlight=bilder+scalieren
und da steht dann:

man convert für die Manpage
z.B.
convert -verbose ./bild.jpg -scale 1024x768 ./bild-neu.jpg
für eine neue Auflösung.

Gruß, Hermann
 
OP
mada

mada

Hacker
Hallo Hermann,

das stimmt schon, was Du sagst, aber:

Erstens kannst auf diese Weise nur einzelne Bilder skalieren, fuer einen Ordner mit 113 jpgs brauchst knapp ne Stunde dafuer.

Und zweitens ist die Angabe 1024x768 nicht dazu geeignet, sowohl hochformatige als auch querformatige Bilder richtig zu skalieren. Wenn du damit naemlich ein portrait, z.B. 1200x1600, bearbeitest, bekommst nicht etwa 768x1024 zurueck, sondern eben nur 576x768! Damit hast bei hochformatigen Bildern erheblich mehr Qualitaetsverlust, als bei Querformaten.

Wenn Du aber sagst 1024x1024, dann passts! Und die Bildseitenverhaeltnisse kommen auch nicht aus dem Tritt.

Und das war ein Posting wert, war naemlich nirgends zu finden, bin auf der ImageMagick-HP druebergestolpert.

Also nix fuer ungut, aber ich gehe mal davon aus, dass Du nicht ganz verstanden hast, worauf ich rauswollte.

lg, Daniel
 

Hermann

Hacker
mada schrieb:
...Erstens kannst auf diese Weise nur einzelne Bilder skalieren, fuer einen Ordner mit 113 jpgs brauchst knapp ne Stunde dafuer.

Und zweitens ist die Angabe 1024x768 nicht dazu geeignet, sowohl hochformatige als auch querformatige Bilder richtig zu skalieren...

Hallo Daniel, stimmt, aber es gibt schon einige Themen hier wo es um das umbenennen/konvertieren von allen Bildern in einem Ordner geht.
Da sollte es doch möglich sein in der for Schleife die Zeile:
convert "$bild" "${bild%.png}.pgm"
durch
convert -verbose -quality "$bild" -scale 1024x768 "S_$bild"
zu ersetzen und wenn es dann auch in der Höhe max 1024 sein soll durch
convert -verbose -quality "$bild" -scale 1024x1024 "S_$bild"
zu ersetzen.

Und zu vielen Programmen gibt es Hilfe man Programmname oder Programmname --help.

Gruß, Hermann
 
OP
mada

mada

Hacker
Hallo?

Exakt *die* Information, dass ImageMagick die Bildseitenverhaeltnisse auch bei einer Angabe 1024x1024 BEIBEHAELT war nirgends gestanden, auch in Deinem geschaetzten Beitrag nicht. Die im genannten Thread und einem anderen vorgeschlagenen Loesungen waren im Endeffekt dann Xnview (GUI) oder Hochformate aussortieren und getrennt verarbeiten...

Es tut mir leid, aber Letzteres ist ja wohl aber mal deutlich unpraktischer als das Skript, das ich jetzt gepostet hab.

Versteh nicht, warum es da noch eines weiteren Kommentars ala "war schon so aehnlich woanders gestanden" und "das bisschen skripten kann doch jeder" bedarf. Die paar Zeilen Skript machen ohne Aufwand genau das, was etliche Digicambesitzer dringend brauchen, bisher aber im schlimmsten Fall mit Gimp oder Photoshop einzeln fuer jedes Bildchen machen.

lg, Daniel

immer noch der Meinung, das dieser Codefetzen von mir einigen helfen wird.
 

Hermann

Hacker
mada schrieb:
...immer noch der Meinung, das dieser Codefetzen von mir einigen helfen wird.

Das wird wohl so sein. Es schadet aber auch nicht selber mal ein wenig zu überlegen, das nächste Problem kann man dann selber lösen.

*edit*
--scale = Seitenverhältnis beim scalieren beibehalten
1024x768 = maximale ausdehnung

Gruß, Hermann
 
OP
mada

mada

Hacker
Hallo Hermann,

Es schadet aber auch nicht selber mal ein wenig zu überlegen, das nächste Problem kann man dann selber lösen.

Um den Satz fertig zu machen:
Und wenn mans geloest hat, dann schadet es auch nicht, wenn man's anderen mitteilt. Nix anderes hab ich gemacht, und dazu is naemlich dieses Forum da :)

Muss mich jetzt aber mal auf die Socken machen.

Schoenen Abend noch Dir,

lg, Daniel
 

Kurt M

Hacker
mada schrieb:
Es hat auch Antworten gegeben, aber keiner hatte gewusst, dass ImageMagick so schlau ist, das Aspektverhaeltnis der Bilder automatisch beizubehalten.

Hallo Daniel,

hab nach so einem Script gesucht und deines kam mir gerade recht.
Es läuft absolut perfekt.
Damit kann ich den ganzen Sack voll großer Bilder für das Internet skalieren und vor allem es geht sehr schnell, und ich habe mir die Arbeit gespart selbst nachdenken zu müssen :wink:

Danke
Kurt
 
OP
mada

mada

Hacker
Ja, das freut natürlich, wenn ein so altes Posting nochmal zu solchen Ehren kommt :) Genau aus dem gleichen Grund hab ich mir das damals zusammengesucht, um massenweise Bilder auf einen Rutsch internettauglich zu machen...

Schönen Dienstag noch,
Daniel
 

Undying

Member
Code:
convert -verbose -quality 75 "$pic" -scale 1024x1024 "R_$pic"

Bewirkt das dass jeweilige Bild eine Seite 1024 px hat und die andere entsprechender skaliert wird oder einfach beide Seite auf 1024 x 1024px?

Um eine 100% Qualität zu bekommen und Bilder dessen Seite, eine!, 500px breit/hoch ist kann ich dann wenn nur eine Seite auf 1024px im obigen Skript folgendes machen:
Code:
convert -verbose -quality 100 "$pic" -scale 500x500 "R_$pic"

oder?[/code]
 
OP
mada

mada

Hacker
Ja, steht ganz oben im Posting drin: das Seitenverhältnis bleibt grundsätzlich erhalten, wenn Du das nicht willst, also z.B. tatsächlich ein 500x500 Bild als Ergebnis haben willst, dann muss man das über eine Option mitteilen -- welche weiß ich auch grad nicht auswendig. ImageMagick-Hilfe weiß da sicher mehr.

Eine 100% Qualität bei JPGs dürfte jedenfalls nicht viel bringen, ausser dass die Dateigröße enorm wird. Werte über 85% haben in der Praxis eigentlich keine Relevanz, drum ist es auch die Voreinstellung beim Export nach jpg in GIMP...

Beim Ausprobieren geht übrigens nichts kaputt, Deinen Originalbilder werden nicht angefasst, also nur Mut.
 
OP
mada

mada

Hacker
Ja, geht alles mit ImageMagick. Der Kontexbefehl des Konqeror z.B. tut nichts anderes, als den entsprechenden ImageMagick-Befehl auszurufen... Aber so ein bissl Eigeninitiative wär auch nicht schlecht, oder nicht?
*mit Zaunpfahl und Silbertablett wink*
Code:
man convert
könnte Dir helfen
 
Undying schrieb:
Bekomme ich auch eine 90° Drehung nach rechts oder linsk damit hin?

Mit "convert -help" oder "man convert" werden dir die möglichen Optionen ausgegeben.

Hiermit kannst du das Bild drehen:
Code:
convert -rotate degrees

Nur bin ich mir gerade nicht sicher, ob das Ganze im oder gegen den Uhrzeigersinn gedreht wird (steh grad total aufm Schlauch :oops: ).

Daniel
 

Undying

Member
Ok, hast ja eigentlich recht und ich stand gerade auch auf dem Schlauch weil irgendwie nicht drauf gekommen bin wie ich die Hilfe aufgerufen bekomme für convert bis ich es dann sah :oops:
Naja Danke trotzdem

EDIT:
convert: unable to open image `*.jpg': Datei oder Verzeichnis nicht gefunden.
mv: Aufruf von stat für „*.jpg“ nicht möglich: Datei oder Verzeichnis nicht gefunden

EDIT die 2.te:
Hat sich erledigt... Hab die Endung in Großbuchstaben gehabt, soviel zu 'auf den Schlauch stehen" ^^
 
OP
mada

mada

Hacker
Wenn in dem Verzeichnis sonst nichts drin ist als jpg, jpeg, JPG und JPEG (was ja das gleiche ist), dann kannst das Skript auch einfacher machen:
Code:
for pic in *
statt
Code:
for pic in *.jpg
Dann musst Dich nicht mit Groß-/Kleinschreibung ärgern. Oder halt vorher noch eine paar Befehle dranhängen, die erstmal aus allen JPEGs usw. jpg machen.
 

hwippich

Newbie
Eine englische Anleitung findet ihr auch auf euren PC unter
'file:///usr/share/doc/packages/ImageMagick/index.html'
 

Forsti

Newbie
Das wird mir auf jeden Fall sehr viele Stunden Arbeit ersparen. Man glaubt gar nicht, wie viel Zeit man für das manuelle Skalieren vertrödelt.
 
Oben