Gibt es einen offensichtlichen Weg, dies zu tun, den ich vermisse? Ich versuche nur, Thumbnails zu machen.
python
image
python-imaging-library
thumbnails
Samstag Ort
quelle
quelle
Antworten:
Definieren Sie eine maximale Größe. Berechnen Sie dann ein Größenänderungsverhältnis, indem Sie nehmen
min(maxwidth/width, maxheight/height)
.Die richtige Größe ist
oldsize*ratio
.Dazu gibt es natürlich auch eine Bibliotheksmethode: die Methode
Image.thumbnail
.Unten finden Sie ein (bearbeitetes) Beispiel aus der PIL-Dokumentation .
quelle
s= img.size(); ratio = MAXWIDTH/s[0]; newimg = img.resize((s[0]*ratio, s[1]*ratio), Image.ANTIALIAS)
? (Das ist allerdings für die Gleitkommadivision :)ANTIALIAS
für Benutzer der beliebten Pillow-Gabel von PIL nicht mehr bevorzugt wird. pillow.readthedocs.org/en/3.0.x/releasenotes/…thumbnail
nur funktioniert, wenn das resultierende Bild kleiner als das Original ist. Aus diesem Grund würde ich vermuten, dass die Verwendungresize
der bessere Weg ist.Dieses Skript ändert die Größe eines Bildes (somepic.jpg) mithilfe von PIL (Python Imaging Library) auf eine Breite von 300 Pixel und eine Höhe proportional zur neuen Breite. Dazu wird ermittelt, wie viel Prozent 300 Pixel der ursprünglichen Breite (img.size [0]) entsprechen, und anschließend die ursprüngliche Höhe (img.size [1]) mit diesem Prozentsatz multipliziert. Ändern Sie "Basisbreite" in eine andere Zahl, um die Standardbreite Ihrer Bilder zu ändern.
quelle
sompic.jpg
. Warum passiert das? Ich benutze Python 3.x.jpeg
, verwenden Sieimg.save('sompic.jpg', 'JPEG')
.PIL.Image.ANTIALIAS
Option fürresize
, sollte eigentlich seinPIL.Image.LANCZOS
, obwohl beide1
im Wert sind, siehe pillow.readthedocs.io/en/3.1.x/reference/…Ich empfehle auch die Verwendung der Miniaturansicht von PIL, da dadurch alle Probleme mit dem Verhältnis von Ihnen beseitigt werden.
Ein wichtiger Hinweis: Ersetzen
mit
Standardmäßig verwendet PIL den Filter Image.NEAREST zum Ändern der Größe, was zu einer guten Leistung, aber einer schlechten Qualität führt.
quelle
Image.thumbnail
.Basierend auf @tomvon habe ich Folgendes verwendet (wählen Sie Ihren Fall aus):
a) Größe ändern ( ich kenne die neue Breite, daher brauche ich die neue Höhe )
b) Größenänderung der Breite ( Ich kenne die neue Höhe, daher benötige ich die neue Breite )
Dann einfach:
quelle
resize
Anruf verwenden Sie dienew_width
sowohl für Höhe als auch für Breite?PIL hat bereits die Möglichkeit, ein Bild zuzuschneiden
quelle
quelle
Wenn Sie versuchen, das gleiche Seitenverhältnis beizubehalten, würden Sie dann nicht die Größe um einen bestimmten Prozentsatz der Originalgröße ändern?
Zum Beispiel die Hälfte der Originalgröße
quelle
Ich benutze diese Bibliothek:
quelle
Wenn Sie das Bild nicht mit Pillow öffnen möchten / müssen, verwenden Sie Folgendes:
quelle
Aktualisieren Sie diese Frage einfach mit einem moderneren Wrapper. Diese Bibliothek umschließt Pillow (eine Abzweigung von PIL). Https://pypi.org/project/python-resize-image/
So können Sie Folgendes tun: -
Weitere Beispiele finden Sie im obigen Link.
quelle
Ich habe versucht, die Größe einiger Bilder für ein Diashow-Video zu ändern, und aus diesem Grund wollte ich nicht nur eine maximale Dimension, sondern auch eine maximale Breite und eine maximale Höhe (die Größe des Videorahmens).
Und es gab immer die Möglichkeit eines Porträtvideos ...
Die
Image.thumbnail
Methode war vielversprechend, aber ich konnte es nicht zu einem kleineren Bild machen.Nachdem ich hier (oder an anderen Orten) keinen offensichtlichen Weg gefunden hatte, dies zu tun, schrieb ich diese Funktion und stellte sie hier für die kommenden ein:
quelle
Eine einfache Methode, um eingeschränkte Verhältnisse beizubehalten und eine maximale Breite / Höhe zu überschreiten. Nicht die schönste, erledigt aber die Arbeit und ist leicht zu verstehen:
Hier ist ein Python-Skript , das diese Funktion verwendet, um die Größenänderung von Batch-Images auszuführen.
quelle
Habe die Antwort oben von "tomvon" aktualisiert
quelle
Mein hässliches Beispiel.
Funktion Datei abrufen wie: "pic [0-9a-z]. [Erweiterung]", Größe auf 120x120 ändern, Abschnitt in die Mitte verschieben und in "ico [0-9a-z] speichern. [Erweiterung]", arbeitet mit Hochformat und Landschaft:
quelle
Ich habe die Größe des Bildes so geändert und es funktioniert sehr gut
quelle
Ich werde auch eine Version der Größenänderung hinzufügen, die das Seitenverhältnis festhält. In diesem Fall wird die Höhe an die Breite des neuen Bildes angepasst , basierend auf dem anfänglichen Seitenverhältnis asp_rat , das float (!) Ist . Um die Breite an die Höhe anzupassen, müssen Sie stattdessen nur eine Zeile kommentieren und die andere in der else- Schleife auskommentieren. Sie werden sehen, wo.
Sie brauchen die Semikolons (;) nicht, ich behalte sie nur, um mich an die Syntax der Sprachen zu erinnern, die ich häufiger verwende.
Und es ist geschafft. Ich habe versucht, es so gut wie möglich zu dokumentieren, damit es klar ist.
Ich hoffe, es könnte jemandem da draußen hilfreich sein!
quelle
Öffnen Sie Ihre Bilddatei
Verwenden Sie die Methode PIL Image.resize (Größe, Resample = 0) , bei der Sie die Größe 2-Tupel (Breite, Höhe) Ihres Bildes ersetzen.
Dadurch wird Ihr Bild in Originalgröße angezeigt:
Dadurch wird Ihr Bild in der halben Größe angezeigt:
Dadurch wird Ihr Bild in 1/3 der Größe angezeigt:
Dadurch wird Ihr Bild in 1/4 der Größe angezeigt:
etc etc.
quelle
display()
und wo befindet es sich?quelle
Sie können die Bildgröße mithilfe des folgenden Codes ändern:
quelle