Wenn ich ein Bild verkleinere, das kleiner ist als gewünscht, möchte ich, dass das Bild NICHT in der Größe geändert wird ... sondern stattdessen in der Mitte, mit weißer Polsterung darum herum.Wie ändere ich meinen Python-Bildresizer-Code, um dies zu tun?
Also, sagen wir, ich habe ein Symbol, das 50x50 ist. Aber ich möchte es auf 100x100 skalieren. Wenn ich es an diese Funktion übergebe, möchte ich, dass es das gleiche Symbol zurückgibt, das zentriert ist und auf jeder Seite 25 Pixel auffüllt.
Natürlich möchte ich das mit Bildern beliebiger Breite/Höhe und nicht nur einem Quadrat wie im obigen Beispiel arbeiten.
Mein aktueller Code ist unten.
Ich weiß nicht, warum ich if height=None: height=width
... Ich denke, es war nur, weil es funktionierte, wenn ich es vorher getan habe.
def create_thumbnail(f, width=200, height=None):
if height==None: height=width
im = Image.open(StringIO(f))
imagex = int(im.size[0])
imagey = int(im.size[1])
if imagex < width or imagey < height:
return None
if im.mode not in ('L', 'RGB', 'RGBA'):
im = im.convert('RGB')
im.thumbnail((width, height), Image.ANTIALIAS)
thumbnail_file = StringIO()
im.save(thumbnail_file, 'JPEG')
thumbnail_file.seek(0)
return thumbnail_file
Dieser Code kann viele Bugs enthalten, nicht sicher.
Wenn das Eingabebild kleiner ist, erstellen Sie ein leeres Bild mit Image.new und fügen Sie das Bild dann mit Paste in die Mitte des leeren Bildes ein –