2011-01-25 6 views
10

는이 코드가 작동을 받고 몇 가지 문제가있을 것 같다 :Python PIL : 이미지 중간에 타원을 그리는 방법은 무엇입니까?

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

이 40 개 픽셀 40 (60,60)에서 타원을 그린다. 이미지는 아무것도 반환하지 않습니다.

이 코드는 잘하지만 작동합니다

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

그냥 내가 (타원 배치 할 위치에 대해) 처음 2 공동 ords를 변경할 때이보다 큰 경우 작동하지 않습니다 보인다 묘화되는 타원의 크기. 예 :

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

작동하지만 rect의 일부만 보여줍니다. 반면에

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

은 전혀 아무것도 표시하지 않습니다.

사각형을 그릴 때도 마찬가지입니다.

답변

15

테두리 상자는 4- 튜플 (x0, y0, x1, y1)입니다. 여기서 (x0, y0)은 상자의 왼쪽 위 경계이고 (x1, y1)은 상자의 오른쪽 아래 경계입니다.

이미지의 가운데에 타원을 그리려면 타원의 경계 상자를 얼마나 크게할지 정의해야합니다 (내 코드 단편에있는 변수 eXeY).

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

이것은 다음과 같은 결과를 산출한다 (오른쪽에서 왼쪽 1.jpgoutput.png) :

상기두고

은 아래에서 이미지의 중앙에 타원을 그릴 수있는 코드이다 1.jpgoutput.png

+0

감사합니다. 테두리 상자의 개념은 새로운 것이므로 여기서 약간 혼란 스러웠습니다. 위대한 설명과 예를 들어 주셔서 감사합니다 :) – Tommo

+0

다행 :). – sahhhm

3

타원 함수는 경계 상자 내에 타원을 그립니다. 따라서 draw.ellipse((40,40,60,60)) 또는 왼쪽 위가 오른쪽 하단보다 작은 다른 좌표를 사용해야합니다.

관련 문제