640 Stimmen

Wie kann ich die Größe eines Bildes mit PIL ändern und das Seitenverhältnis beibehalten?

Gibt es eine offensichtliche Möglichkeit, dies zu tun, die ich übersehe? Ich versuche nur, Miniaturansichten zu erstellen.

14voto

from PIL import Image

img = Image.open('/your image path/image.jpg') # image extension *.png,*.jpg
new_width  = 200
new_height = 300
img = img.resize((new_width, new_height), Image.ANTIALIAS)
img.save('output image name.png') # format may what you want *.png, *jpg, *.gif

9voto

Vito Gentile Punkte 11839

Sie können PIL's kombinieren Image.thumbnail con sys.maxsize wenn die Größenbeschränkung nur für eine Dimension (Breite oder Höhe) gilt.

Wenn Sie zum Beispiel die Größe eines Bildes so ändern möchten, dass seine Höhe nicht mehr als 100 Pixel beträgt, während das Seitenverhältnis beibehalten wird, können Sie so vorgehen:

import sys
from PIL import Image

image.thumbnail([sys.maxsize, 100], Image.ANTIALIAS)

Bitte beachten Sie, dass Image.thumbnail wird die Größe des Bildes an Ort und Stelle geändert, was sich von Image.resize die stattdessen das verkleinerte Bild zurückgibt, ohne das Original zu verändern.

8voto

Shanness Punkte 355

Ich aktualisiere diese Frage nur mit einer moderneren Umhüllung Diese Bibliothek wickelt Pillow (eine Abspaltung von PIL) https://pypi.org/project/python-resize-image/

Damit Sie so etwas tun können :-

from PIL import Image
from resizeimage import resizeimage

fd_img = open('test-image.jpeg', 'r')
img = Image.open(fd_img)
img = resizeimage.resize_width(img, 200)
img.save('test-image-width.jpeg', img.format)
fd_img.close()

Viele weitere Beispiele finden Sie unter dem obigen Link.

7voto

hoohoo-b Punkte 951

Wenn Sie das Bild nicht mit Pillow öffnen wollen/können, verwenden Sie dies:

from PIL import Image

new_img_arr = numpy.array(Image.fromarray(img_arr).resize((new_width, new_height), Image.ANTIALIAS))

7voto

guettli Punkte 23426
from PIL import Image
from resizeimage import resizeimage

def resize_file(in_file, out_file, size):
    with open(in_file) as fd:
        image = resizeimage.resize_thumbnail(Image.open(fd), size)
    image.save(out_file)
    image.close()

resize_file('foo.tif', 'foo_small.jpg', (256, 256))

Ich benutze diese Bibliothek:

pip install python-resize-image

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X