2010-11-30 5 views
0

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.

Antwort

3

Eine Option besteht darin, ein leeres weißes Bild der gewünschten Größe zu erstellen und dann das vorhandene Bild in der Mitte zu zeichnen.

+1

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 –

Verwandte Themen