Ich muss ein Bild aufnehmen und es auf einem neuen, generierten weißen Hintergrund platzieren, damit es in ein herunterladbares Desktop-Hintergrundbild umgewandelt werden kann. Also würde der Prozess gehen:
- Generieren Sie ein neues, vollständig weißes Bild mit den Abmessungen 1440 x 900
- Platzieren Sie das vorhandene Bild zentriert oben
- Als Einzelbild speichern
In PIL sehe ich das ImageDraw
Objekt, aber nichts zeigt an, dass es vorhandene Bilddaten auf ein anderes Bild zeichnen kann. Vorschläge oder Links, die jeder empfehlen kann?
python
image-processing
python-imaging-library
Sebastian
quelle
quelle
from PIL import Image
, um den Code mit Pillow kompatibler zu machen .Basierend auf der Antwort von unutbus:
#!/usr/bin/env python from PIL import Image import math def resize_canvas(old_image_path="314.jpg", new_image_path="save.jpg", canvas_width=500, canvas_height=500): """ Place one image on another image. Resize the canvas of old_image_path and store the new image in new_image_path. Center the image on the new canvas. """ im = Image.open(old_image_path) old_width, old_height = im.size # Center the image x1 = int(math.floor((canvas_width - old_width) / 2)) y1 = int(math.floor((canvas_height - old_height) / 2)) mode = im.mode if len(mode) == 1: # L, 1 new_background = (255) if len(mode) == 3: # RGB new_background = (255, 255, 255) if len(mode) == 4: # RGBA, CMYK new_background = (255, 255, 255, 255) newImage = Image.new(mode, (canvas_width, canvas_height), new_background) newImage.paste(im, (x1, y1, x1 + old_width, y1 + old_height)) newImage.save(new_image_path) resize_canvas()
Denken Sie daran, Pillow ( Documentation , GitHub , PyPI ) anstelle von Python-Imaging zu verwenden, da Pillow mit Python 2.X und Python 3.X funktioniert.
quelle
Dies ist etwas Ähnliches zu tun
Ich begann damit, diesen „weißen Hintergrund“ in Photoshop zu generieren und als PNG-Datei zu exportieren. Dort habe ich im1 bekommen (Bild 1). Verwenden Sie dann die Einfügefunktion, da dies viel einfacher ist.
from PIL import Image im1 = Image.open('image/path/1.png') im2 = Image.open('image/path/2.png') area = (40, 1345, 551, 1625) im1.paste(im2, area) l>(511+40) l>(280+1345) | l> From 0 (move, 1345px down) -> From 0 (top left, move 40 pixels right)
quelle
Image.blend()
? [ Link ]Oder noch besser
Image.paste()
, derselbe Link.quelle
Image.paste()
auch, was letztendlich die Lösung war.Vielleicht zu spät, aber für solche Bildoperationen verwenden wir ImageSpecField [ Link ] in einem Modell mit Originalbild.
quelle