2011-01-25 20 views
10

Bu kod işe alma bazı sorun yaşıyor gibisin:Python PIL: Bir görüntünün ortasında elips çizmek nasıl?

import Image, ImageDraw 

im = Image.open("1.jpg") 

draw = ImageDraw.Draw(im) 
draw.ellipse((60, 60, 40, 40), fill=128) 
del draw 

im.save('output.png') 
im.show() 

Bu 40 piksel 40 (60,60) bir elips çizmek gerekir. Görüntü hiçbir şey döndürmez.

Bu kod ince ancak çalışır:

draw.ellipse ((0,0,40,40), fill=128) 

Sadece ben (elips konulmalıdır nerede için) ilk 2 eş ords'ün değiştirdiğinizde onlar daha büyükse, o iş olmayacak gibi görünüyor Çizilecek elipsin büyüklüğü. Örneğin:

draw.ellipse ((5,5,15,15), fill=128) 

Çalışmalar yalnızca rect'in bir bölümünü gösterir. Halbuki,

hiçbir şey göstermemektedir.

Bu, bir dikdörtgen çizerken de olur.

cevap

15

sınırlayıcı kutu 4-lü (x0, y0, x1, y1) olup.

görüntünün merkezine bir elips çizmek için, size Elipsin sınırlayıcı kutusu (aşağıda benim kod parçacığının değişkenler eX ve eY) olmak istiyorum ne kadar büyük tanımlamanız gerekir.

from PIL import Image, ImageDraw 

im = Image.open("1.jpg") 

x, y = im.size 
eX, eY = 30, 60 #Size of Bounding Box for ellipse 

bbox = (x/2 - eX/2, y/2 - eY/2, x/2 + eX/2, y/2 + eY/2) 
draw = ImageDraw.Draw(im) 
draw.ellipse(bbox, fill=128) 
del draw 

im.save("output.png") 
im.show() 

Bu şu sonucu verir (sağda kalan 1.jpg üzerinde output.png):

bahsedilen ile

, altında bir görüntünün merkezine bir elips şekli ortaya kod parçacığı olduğu 1.jpgoutput.png

+0

Teşekkürler - sınırlayıcı kutular fikri benim için yeni oldu, bu yüzden burada biraz kafam karıştı. Büyük açıklama ve örnek için teşekkürler :) – Tommo

+0

Yardım için sevindim :). – sahhhm

3

Elips işlevi, sınırlayıcı kutusu içinde bir elips çizer. Dolayısıyla, draw.ellipse((40,40,60,60)) veya sol üst köşenin sağ alttan küçük olduğu diğer koordinatları kullanmanız gerekir. (x0, y0) kutusunun bağlanan sol üst ve (x1, y1) kutunun bağlanan sağ alt burada