Wie teilt Bild In Mehrere Stücke in Python
Ich versuche zu splitten, ein Foto in mehrere Stücke mit PIL.
def crop(Path,input,height,width,i,k,x,y,page):
im = Image.open(input)
imgwidth = im.size[0]
imgheight = im.size[1]
for i in range(0,imgheight-height/2,height-2):
print i
for j in range(0,imgwidth-width/2,width-2):
print j
box = (j, i, j+width, i+height)
a = im.crop(box)
a.save(os.path.join(Path,"PNG","%s" % page,"IMG-%s.png" % k))
k +=1
aber es scheint nicht zu funktionieren. Es teilt das Foto, aber nicht in einer exakten Art und Weise (versuchen kann man es).
- Was meinst du mit "genau" Breite und Höhe?
- Sie können verwenden Liste Verstehens, siehe meine Antwort unten
Du musst angemeldet sein, um einen Kommentar abzugeben.
k
ein parameter dieser Funktion? Sollte es nicht immer0
beim aufrufen der Funktion? Auch wasarea
? Warum tun Siecrop
das Bild zweimal?Edit: ich glaube, diese Antwort verpasst dem Vorsatz, Schnitt Sie ein Bild in Rechtecke in Zeilen und Spalten. Diese Antwort Schnitte nur in Zeilen. Es sieht aus wie andere Antworten schneiden Sie in Spalten und Zeilen.
Einfacher als alle diese, ist die Verwendung einer wheel jemand anderes erfunden 🙂 Es kann sein, mehr beteiligt zu richten, aber dann ist es ein Kinderspiel zu verwenden.
Diese Anweisungen sind für Windows 7; Sie müssen angepasst werden, für andere OSs.
Bekommen und zu installieren pip aus hier.
Download das install Archiv und extrahieren Sie es zu Ihrem root-Python-Installationsverzeichnis. Öffnen Sie eine Konsole und geben Sie (wenn ich mich Recht erinnere):
Dann Holen Sie sich und installieren Sie das image_slicer-Modul über pip, indem Sie den folgenden Befehl an der Konsole:
Kopieren Sie das gewünschte Bild, um die Scheibe in die Python-root-Verzeichnis, öffnen Sie ein python-shell (nicht der "Eingabeaufforderung") und geben Sie diese Befehle ein:
Die Schönheit von diesem Modul ist, dass es
Splitting image Fliesen von MxN Pixel (vorausgesetzt ist die im numpy.ndarray):
In die Falle, die Sie teilen möchten, auf das Bild, um vier Stücke:
Fliesen[0] enthält die Obere linke Kachel
crop
wäre ein mehr wiederverwendbarFunktion, wenn Sie die separate
zuschneiden code aus der
Bild speichern
code. Es würde auch anrufen
Signatur einfacher.
im.crop
gibt eineImage._ImageCrop
Instanz. SolcheInstanzen haben keine save-Methode.
Stattdessen müssen Sie fügen Sie den
Image._ImageCrop
Instanz auf eineneue
Image.Image
Schritt Größen. (Warum
height-2
und nichtheight
? zum Beispiel. Warum stoppen Sie amimgheight-(height/2)
?).Also, könnten Sie versuchen, statt so etwas wie dieses:
img.paste(piece)
Hier ist eine prägnante, Reine python-Lösung, die funktioniert in beiden python 3 und 2:
Hinweise:
Dies ist mein Skript, tools, es ist sehr Probe zu splite css-Geist-Bild in Symbolen:
Speichern von code in split_icons.py :
Ich finde es einfacher zu
skimage.util.view_as_windows
oder `skimage.util.view_as_blocks, die ermöglicht Ihnen auch das konfigurieren der Schritthttp://scikit-image.org/docs/dev/api/skimage.util.html?highlight=view_as_windows#skimage.util.view_as_windows