2011-01-25 7 views
10

मैं कुछ परेशानी इस कोड को काम करने के लिए हो रही हो रहे हैं:पायथन पीआईएल: एक छवि के बीच में एक अंडाकार कैसे आकर्षित करें?

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

यह (60,60) जो 40 40 पिक्सल द्वारा है पर एक अंडाकार आकर्षित करना चाहिए। छवि कुछ भी नहीं देता है।

इस कोड लेकिन ठीक काम करता है:

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

यह सिर्फ लगता है कि जब मैं पहले 2 सह ords (जहां अंडाकार रखा जाना चाहिए के लिए) को बदलने यह अगर वे से बड़े होते हैं काम नहीं करेगा खींचा जाने के लिए अंडाकार का आकार। उदाहरण के लिए:

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

काम करता है, लेकिन केवल रेक्ट का हिस्सा पता चलता है। जबकि

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

कुछ भी नहीं दिखाता है।

ऐसा होता है जब आयताकार भी खींचा जाता है।

उत्तर

15

बाउंडिंग बॉक्स एक 4-ट्यूपल (x0, y0, x1, y1) है जहां (x0, y0) बॉक्स के ऊपरी बाएं बाएं हैं और (x1, y1) बॉक्स के निचले दाएं बाएं हैं।

छवि के केन्द्र के लिए एक अंडाकार आकर्षित करने के लिए, आप कैसे बड़े आप अपने अंडाकार के सीमांकन बॉक्स (चर eX और eY नीचे मेरी कोड स्निपेट में) होना चाहता हूँ को परिभाषित करने की जरूरत है।

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.jpg पर छोड़ दिया, output.png):

ने कहा कि के साथ, नीचे एक कोड का टुकड़ा है कि एक छवि के केंद्र के लिए एक अंडाकार खींचता है 1.jpgoutput.png

+0

धन्यवाद - बाध्यकारी बक्से का विचार मेरे लिए नया था इसलिए मैं यहां थोड़ा उलझन में था। महान स्पष्टीकरण और उदाहरण के लिए धन्यवाद :) – Tommo

+0

मदद करने के लिए खुशी :)। – sahhhm

3

एलीपसे फ़ंक्शन बाध्यकारी बॉक्स के भीतर एक अंडाकार खींचता है। इसलिए आपको draw.ellipse((40,40,60,60)) या अन्य निर्देशांक का उपयोग करने की आवश्यकता है जहां शीर्ष बाएं निचले दाएं से छोटे हैं।

संबंधित मुद्दे