PIL kullanarak bir görüntü nasıl kırpılır?


134

Verilen resimden ilk 30 satırı ve son 30 satırı kaldırarak resmi şekilde kırpmak istiyorum. Aradım ama kesin çözümü bulamadım. Birinin önerisi var mı?

Yanıtlar:


196

Bir crop()yöntem var:

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

1
Evet, im.crop (box) 'ın resmi kırpmak için kullanıldığını biliyorum. Ancak, görüntünün yalnızca üst ve alt kısmını sol ve sağ değil, kırpmak istiyorum, ancak kutu () 4 demet alıyor ancak görüntünün üst ve alt kısımlarını nasıl kırpacağımı anlayamıyorum.
Taj Koyal 02

4
@TajKoyal: Ninjagecko'nun tam olarak size gösterdiği şey, yukarıdan ve aşağıdan nasıl koptuğunuz. Yeni görüntü için bir dikdörtgen belirliyor. Üst ve alt noktalardaki y değerinden 30 pikseli tıraş ettiğini görebilirsiniz. X değerlerini herhangi bir şekilde kaydırırsanız, BU, sol ve sağ tarafları etkiler.
jdi

1
Bana yardım ettiğiniz için teşekkürler çocuklar.
Taj Koyal

7
Benim kadar tembel biri içinParameters: box – The crop rectangle, as a (left, upper, right, lower)-tuple.
Rishav

53

Bunun için PIL (Yastık) ithal etmeniz gerekiyor. 1200, 1600 boyutunda bir resminiz olduğunu varsayalım. Resmi 400, 400'den 800, 800'e keseceğiz.

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

20

(sol, üst, sağ, alt) iki nokta anlamına gelir,

  1. (sol, yukarı)
  2. (sağ, aşağı)

800x600 piksel görüntüde, görüntünün sol üst noktası (0, 0), sağ alt noktası (800, 600).

Yani, görüntünün yarısını kesmek için:

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()

görüntü açıklamasını buraya girin

Koordinat sistemi

Python Görüntüleme Kitaplığı, sol üst köşede (0,0) ile bir Kartezyen piksel koordinat sistemi kullanır. Koordinatların ima edilen piksel köşelerine atıfta bulunduğunu unutmayın; (0, 0) olarak adreslenen bir pikselin merkezi aslında (0.5, 0.5) 'de yer alır.

Koordinatlar genellikle kütüphaneye 2-tuple (x, y) olarak aktarılır. Dikdörtgenler, önce sol üst köşe olmak üzere 4-tuple olarak temsil edilir. Örneğin, 800x600 piksellik bir görüntünün tamamını kaplayan bir dikdörtgen (0, 0, 800, 600) olarak yazılır.


13

Bunu yapmanın daha kolay bir yolu, ImageOps'tan kırpma kullanmaktır . Her iki taraftan kırpmak istediğiniz piksel sayısını besleyebilirsiniz.

from PIL import ImageOps

border = (0, 30, 0, 30) # left, up, right, bottom
ImageOps.crop(img, border)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.