Batch Image Auto-Zuschneiden, Anwenden einer festen Breite und Beibehalten des Seitenverhältnisses

2079
StuyvesantBlue

Ich finde es schwer, eine Lösung für das zu finden, was ich versuche.

Einfach ausgedrückt, die Verwendung dieser Bilder ist für einen Online-Shop.

Die IrfanView-Stapelverarbeitung mit den Schnittrahmen von Autio sortiert den Schnitt grundsätzlich aus. Ich muss das Weiß / Schwarz-Symbol oder den gleichförmigen Rand der zu bearbeitenden Bilder ausschneiden.

Aber ich muss das Bild in einem perfekten Quadrat halten. Wie 300x300 Pixel.

Wenn das beschnittene Bild beispielsweise einen längeren Fokus hat, wird der weiße Bereich / Rand so lange beschnitten, bis der obere und untere Rand erreicht ist. es würde dann nur links und rechts bis zu einem Punkt beschneiden, an dem die Größe von links und rechts der Länge entspricht. Entfernen Sie entweder nur einen Teil der Leerstelle (Rand) - oder fügen Sie ggf. Leerräume (Rand) hinzu.

3
Wenn IrfanView eine Stapelkonvertierung durchführt, zuerst Ränder automatisch zuschneiden und dann eine Größenänderung durchführt, erhält ich ein Ergebnis, mit dem ich arbeiten könnte. Beides in einer Konvertierung zu tun, tut es nicht. Gibt es eine Möglichkeit, IrfanView dazu zu bringen, zuerst den automatischen Zuschnitt durchzuführen und dann die Größenänderung in einem Durchgang durchzuführen, anstatt die Konvertierungen separat durchzuführen? StuyvesantBlue vor 8 Jahren 1
Oh mein Gott, ich sehe jetzt, dass in der rechten unteren Ecke der Erweiterten Einstellungen für die Stapelverarbeitung in IrfanView eine Option zum Anpassen der Verarbeitungsreihenfolge vorhanden ist. StuyvesantBlue vor 8 Jahren 1
Wenn Sie Ihr Problem lösen, geben Sie die Lösung als Antwort ein ... es kann für andere nützlich sein oder durch andere verbessert werden. :) Hastur vor 8 Jahren 0
@Hastur verstanden. Ich habe das Problem nicht genau gelöst, aber es gibt mir etwas, mit dem ich arbeiten kann ... StuyvesantBlue vor 8 Jahren 1

4 Antworten auf die Frage

3
gmelis

imagemagickhat die wunderbare Option -trim. Ich erinnere mich, dass ich es zusammen mit vor -sizeetwa einem Jahr auf einer Reihe von 4500 Bildern verwendet habe, um die leere monochrome Umrandung zu entfernen und nur das Produkt zu behalten. Ich erinnere mich, dass ich alle Bilder in ein Verzeichnis gestellt aund ein leeres Verzeichnis erstellt habe b. dann von dir amit so etwas

for i in *; do convert-im6.q16 $i -trim -resize 300 ../b/$i; done 

Dann wartete ich ungefähr eine Stunde und hatte 4500 Bilder in direktem bmit monochromem Hintergrund und 300 Pixel Breite. Der convert-im6.q16Befehl kann auf anderen Systemen wie convertoder etwas anders benannt werden .

1
StuyvesantBlue

Ich habe IrfanView verwendet, um eine praktikable Lösung zu erreichen.

Verwenden der Stapel-Konvertierung / Umbenennen aus Datei >> Ich füge einfach Bilder zum Dialogfeld "Eingabedateien" hinzu.

  1. Verwenden Sie erweiterte Optionen in den Stapelkonvertierungseinstellungen und klicken Sie anschließend auf Erweitert.

  2. Markieren Sie RESIZE und wählen Sie SET NEW SIZE und dann SETS ON SIDE OF BEIDE SIDES. In der Höhe / Breite die gleiche Größe (ich verwende 300px). Dazu wird das Bild auf einen maximalen Punkt dieser Größe verkleinert. Daher nimmt es die größte Größe (abhängig davon, ob das Bild im Hoch- oder Querformat vorliegt) - und es werden 300px erzeugt. Die andere Seite wird proportional skaliert, sofern Sie das Seitenverhältnis beibehalten.

  3. Was Sie auch tun möchten, ist Smart Crop. Im Fall von IrfanView wird dies als Auto Crop-Rahmen bezeichnet. Diese Einstellung befindet sich rechts neben dem RESIZE-Dialogfeld.

Bevor Sie das abschließen, möchten Sie sicherstellen, dass zuerst das Zuschneiden und dann die Größenänderung ausgeführt wird. Andernfalls erhalten Sie etwas kleineres als das 300px-Bild. Sie können sich das Ergebnis vorstellen.

  1. Aktivieren Sie in der rechten unteren Ecke Benutzerdefinierte Verarbeitungsreihenfolge und klicken Sie auf Reihenfolge ändern. Verschieben Sie die Rahmen für das automatische Zuschneiden nach oben. Klicken Sie auf OK und erneut auf OK. Nun können Sie die Konvertierung durchführen. Clik Start Batch.

Dies hat meine genaue Frage nicht genau gelöst, aber es spielt keine Rolle, solange ich die größte Seite mit 300px und intelligentem Zuschneiden vor der Größenänderung erreichen konnte. Den Rest kann ich mit CSS in meiner HTML-Datei erreichen, was möglicherweise eine bessere Lösung ist.

IMHO ist es besser, wenn Sie eine Batch-Lösung finden, vielleicht mit Imagemagick. Die Schritte sollten 1 Autocrop sein. 2 Größere Seite 3-Skala ohne Verformung bis 300 für die größere Seite finden, 4 Summe zentriert auf ein weißes Quadrat 300x300. Wenn Sie eine Grenze von 20px bis 280 einstellen. Imagemagick ist Ihr bester Freund. Linux sollte eine gute Umgebung für das Skript sein ... viel Glück. Hastur vor 8 Jahren 0
1
qubodup

Vorausgesetzt, Ihre Originalbilder haben keinen echten schwarzen oder weißen Rand und Sie möchten nur die Erstellung solcher Bilder vermeiden, können Sie Imagemagick's verwenden convert:

convert in.jpg -geometry 300x300^ -gravity center -crop 300x300+0+0 out.jpg 

Das Caret (^ ) stellt sicher, dass das Bild sowohl Breite als auch Höhe ausfüllt.

-geometryWenn Sie jedoch nur den Parameter verwenden, wird ein Bild angezeigt, dessen Seite zu groß ist. Angenommen, Sie haben kein quadratisches Quellmaterial. Sie müssen also in der Mitte beschneiden, um die endgültige Bildauflösung zu erhalten.+0+0stellt sicher, dass Sie die abgeschnittenen Teile nicht als separate Dateien erhalten, da Sie sie nicht benötigen.

Wenn Sie im Quellbild tatsächlich Ränder haben, sollten Sie -trimgleich danach versuchen in.jpg.

0
Scott Beeson

Meine Anforderungen waren etwas anders, da ich transparente Pixel abschneiden wollte, aber es kann funktionieren, dass ein Rand entfernt wird. Könnte sein.

Keine dieser Antworten funktionierte für mich. Nachdem ich das Kopfgeld gesetzt hatte, suchte ich weiter und stellte fest, dass dies extentdas fehlende Stück war.

magick convert *.png -trim -background none -resize 300x300 -gravity center -extent 300x300 out/processed.png 

Hier ist die Aufschlüsselung der einzelnen Parameter, soweit ich sie verstehe:

  • -trim: Alle transparenten Pixel zuschneiden (links, rechts, oben, unten)
  • -background none: Transparenz für Größenänderung beibehalten (Reihenfolge ist wichtig!)
  • -resize 300x300: Macht die maximale Breite und Höhe auf 300. Macht es nicht quadratisch .
  • -gravity center: Zentriert das Bild (ist möglicherweise nicht erforderlich, arbeitet möglicherweise mit Größenänderung und Ausdehnung, hat nicht viel getestet).
  • -extent 300x300: Ändert die Größe der Leinwand, dies macht sie wieder quadratisch.

Welches übersetzt im Wesentlichen 3 Schritte:

  1. Transparente Kanten entfernen
  2. Ändern Sie die Größe so, dass die Breite / Höhe nicht mehr als 300 Pixel beträgt.
  3. Stellen Sie sowohl die Breite als auch die Höhe auf 300 Pixel ein.