Wie schneide ich ein Bild mit PIL zu?


133

Ich möchte das Bild im Weg zuschneiden, indem ich die ersten 30 Zeilen und die letzten 30 Zeilen aus dem angegebenen Bild entferne. Ich habe gesucht, aber nicht die genaue Lösung erhalten. Hat jemand einige Vorschläge?

Antworten:


195

Es gibt eine crop()Methode:

w, h = yourImage.size
yourImage.crop((0, 30, w, h-30)).save(...)

1
Ja, ich weiß, dass im.crop (Feld) zum Zuschneiden des Bildes verwendet wird. Aber ich möchte nur den oberen und unteren Teil des Bildes zuschneiden, nicht links und rechts, obwohl box () 4 Tupel benötigt, aber ich verstehe nicht, wie man den oberen und unteren Teil des Bildes beschneidet.
Taj Koyal

4
@TajKoyal: Genau das, was Ninjagecko Ihnen zeigt, ist, wie Sie oben und unten abschneiden. Er gibt ein Rechteck für das neue Bild an. Sie können sehen, dass er 30 Pixel vom y-Wert am oberen und unteren Punkt abschneidet. Wenn Sie die x-Werte in irgendeiner Weise versetzen, wirkt sich dies auf die linke und rechte Seite aus.
JDI

1
Danke Jungs, dass ihr mir geholfen habt.
Taj Koyal

7
Für jemanden so faul wie michParameters: box – The crop rectangle, as a (left, upper, right, lower)-tuple.
Rishav

52

Dazu müssen Sie PIL (Pillow) importieren. Angenommen, Sie haben ein Bild der Größe 1200, 1600. Wir werden Bilder von 400, 400 bis 800, 800 zuschneiden

from PIL import Image
img = Image.open("ImageName.jpg")
area = (400, 400, 800, 800)
cropped_img = img.crop(area)
cropped_img.show()

20

(links, oben, rechts, unten) bedeutet zwei Punkte,

  1. (links oben)
  2. (rechts unten)

Bei einem Bild mit 800 x 600 Pixeln ist der linke obere Punkt des Bildes (0, 0) und der rechte untere Punkt (800, 600).

Also, um das Bild zur Hälfte zu schneiden:

from PIL import Image
img = Image.open("ImageName.jpg")

img_left_area = (0, 0, 400, 600)
img_right_area = (400, 0, 800, 600)

img_left = img.crop(img_left_area)
img_right = img.crop(img_right_area)

img_left.show()
img_right.show()

Geben Sie hier die Bildbeschreibung ein

Koordinatensystem

Die Python Imaging Library verwendet ein kartesisches Pixelkoordinatensystem mit (0,0) in der oberen linken Ecke. Beachten Sie, dass sich die Koordinaten auf die implizierten Pixelecken beziehen. Das Zentrum eines als (0, 0) adressierten Pixels liegt tatsächlich bei (0,5, 0,5).

Koordinaten werden normalerweise als 2-Tupel (x, y) an die Bibliothek übergeben. Rechtecke werden als 4-Tupel dargestellt, wobei die obere linke Ecke zuerst angegeben wird. Beispielsweise wird ein Rechteck, das das gesamte Bild mit 800 x 600 Pixeln abdeckt, als (0, 0, 800, 600) geschrieben.


13

Eine einfachere Möglichkeit hierfür ist die Verwendung von Zuschneiden aus ImageOps . Sie können die Anzahl der Pixel eingeben, die Sie von jeder Seite zuschneiden möchten.

from PIL import ImageOps

border = (0, 30, 0, 30) # left, up, right, bottom
ImageOps.crop(img, border)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.