Gibt es eine offensichtliche Möglichkeit, dies zu tun, die ich übersehe? Ich versuche nur, Miniaturansichten zu erstellen.
Antworten
Zu viele Anzeigen?Ich werde auch eine Version der Größenänderung hinzufügen, die das Seitenverhältnis beibehält. In diesem Fall wird die Höhe so angepasst, dass sie der Breite des neuen Bildes entspricht, basierend auf dem ursprünglichen Seitenverhältnis, Asp_ratte das ist Schwimmer (!). Um jedoch die Breite an die Höhe anzupassen, müssen Sie nur eine Zeile auskommentieren und die andere in der Datei sonst Schleife. Sie werden sehen, wo.
Sie brauchen die Semikolons (;) nicht, ich behalte sie nur, um mich an die Syntax von Sprachen zu erinnern, die ich häufiger verwende.
from PIL import Image
img_path = "filename.png";
img = Image.open(img_path); # puts our image to the buffer of the PIL.Image object
width, height = img.size;
asp_rat = width/height;
# Enter new width (in pixels)
new_width = 50;
# Enter new height (in pixels)
new_height = 54;
new_rat = new_width/new_height;
if (new_rat == asp_rat):
img = img.resize((new_width, new_height), Image.ANTIALIAS);
# adjusts the height to match the width
# NOTE: if you want to adjust the width to the height, instead ->
# uncomment the second line (new_width) and comment the first one (new_height)
else:
new_height = round(new_width / asp_rat);
#new_width = round(new_height * asp_rat);
img = img.resize((new_width, new_height), Image.ANTIALIAS);
# usage: resize((x,y), resample)
# resample filter -> PIL.Image.BILINEAR, PIL.Image.NEAREST (default), PIL.Image.BICUBIC, etc..
# https://pillow.readthedocs.io/en/3.1.x/reference/Image.html#PIL.Image.Image.resize
# Enter the name under which you would like to save the new image
img.save("outputname.png");
Und, es ist geschafft. Ich habe versucht, es so gut wie möglich zu dokumentieren, damit es klar ist.
Ich hoffe, dass es für jemanden da draußen hilfreich sein könnte!
Öffnen Sie Ihre Bilddatei
from PIL import Image
im = Image.open("image.png")
PIL-Methode Image.resize(size, resample=0) verwenden , wobei Sie (Breite, Höhe) Ihres Bildes durch das 2er-Tupel Größe ersetzen.
Dadurch wird Ihr Bild in Originalgröße angezeigt:
display(im.resize((int(im.size[0]),int(im.size[1])), 0) )
Dadurch wird Ihr Bild in der Hälfte der Größe angezeigt:
display(im.resize((int(im.size[0]/2),int(im.size[1]/2)), 0) )
Dadurch wird Ihr Bild in 1/3 der Größe angezeigt:
display(im.resize((int(im.size[0]/3),int(im.size[1]/3)), 0) )
Dadurch wird Ihr Bild in 1/4 der Größe angezeigt:
display(im.resize((int(im.size[0]/4),int(im.size[1]/4)), 0) )
usw. usw.
Ich habe versucht, die Größe einiger Bilder für ein Diashow-Video zu ändern, und deshalb wollte ich nicht nur eine maximale Größe, sondern eine maximale Breite et eine maximale Höhe (die Größe des Videobildes).
Und es gab immer die Möglichkeit eines Porträtvideos...
Die Image.thumbnail
Methode war vielversprechend, aber ich konnte sie nicht dazu bringen, ein kleineres Bild hochzuskalieren.
Nachdem ich also keine offensichtliche Möglichkeit gefunden habe, dies hier (oder an anderen Stellen) zu tun, habe ich diese Funktion geschrieben und sie hier für alle anderen zur Verfügung gestellt:
from PIL import Image
def get_resized_img(img_path, video_size):
img = Image.open(img_path)
width, height = video_size # these are the MAX dimensions
video_ratio = width / height
img_ratio = img.size[0] / img.size[1]
if video_ratio >= 1: # the video is wide
if img_ratio <= video_ratio: # image is not wide enough
width_new = int(height * img_ratio)
size_new = width_new, height
else: # image is wider than video
height_new = int(width / img_ratio)
size_new = width, height_new
else: # the video is tall
if img_ratio >= video_ratio: # image is not tall enough
height_new = int(width / img_ratio)
size_new = width, height_new
else: # image is taller than video
width_new = int(height * img_ratio)
size_new = width_new, height
return img.resize(size_new, resample=Image.LANCZOS)
Habe die obige Antwort von "tomvon" aktualisiert.
from PIL import Image
img = Image.open(image_path)
width, height = img.size[:2]
if height > width:
baseheight = 64
hpercent = (baseheight/float(img.size[1]))
wsize = int((float(img.size[0])*float(hpercent)))
img = img.resize((wsize, baseheight), Image.ANTIALIAS)
img.save('resized.jpg')
else:
basewidth = 64
wpercent = (basewidth/float(img.size[0]))
hsize = int((float(img.size[1])*float(wpercent)))
img = img.resize((basewidth,hsize), Image.ANTIALIAS)
img.save('resized.jpg')
Ich habe die Größe des Bildes so angepasst und es funktioniert sehr gut.
from io import BytesIO
from django.core.files.uploadedfile import InMemoryUploadedFile
import os, sys
from PIL import Image
def imageResize(image):
outputIoStream = BytesIO()
imageTemproaryResized = imageTemproary.resize( (1920,1080), Image.ANTIALIAS)
imageTemproaryResized.save(outputIoStream , format='PNG', quality='10')
outputIoStream.seek(0)
uploadedImage = InMemoryUploadedFile(outputIoStream,'ImageField', "%s.jpg" % image.name.split('.')[0], 'image/jpeg', sys.getsizeof(outputIoStream), None)
## For upload local folder
fs = FileSystemStorage()
filename = fs.save(uploadedImage.name, uploadedImage)