2010-06-25 13 views
11

में सेमी-पारदर्शी बहुभुज चित्रण Python Imaging Library का उपयोग करके आप अर्द्ध पारदर्शी बहुभुज कैसे आकर्षित करते हैं?पीआईएल

उत्तर

14

क्या आप बहुभुज को एक अलग आरजीबीए छवि पर आकर्षित कर सकते हैं तो छवि.paste (छवि, बॉक्स, मुखौटा) विधि का उपयोग करें?

संपादित करें: यह काम करता है।

from PIL import Image 
from PIL import ImageDraw 
back = Image.new('RGBA', (512,512), (255,0,0,0)) 
poly = Image.new('RGBA', (512,512)) 
pdraw = ImageDraw.Draw(poly) 
pdraw.polygon([(128,128),(384,384),(128,384),(384,128)], 
       fill=(255,255,255,127),outline=(255,255,255,255)) 
back.paste(poly,mask=poly) 
back.show() 

http://effbot.org/imagingbook/image.htm#image-paste-method

4

मुझे लगता है कि @Nick T के जवाब अच्छा है, लेकिन आप जब अपने कोड एक बहुत बड़ी पृष्ठभूमि छवि के साथ लिखा के रूप में उपयोग करते हुए, विशेष रूप से मामला है कि आप कई व्याख्या की जा सकती है में सावधान रहने की जरूरत है कहा छवि पर बहुभुज। यह कुछ ऐसा है जो मैं कुछ ऑब्जेक्ट डिटेक्शन कोड के साथ विशाल उपग्रह छवियों को संसाधित करता हूं और एक पारदर्शी आयत का उपयोग करके विचलन को एनोटेट करता हूं। कोड को कुशल बनाने के लिए पृष्ठभूमि छवि के आकार से कोई फर्क नहीं पड़ता, मैं निम्नलिखित सुझाव देता हूं।

मैं यह निर्दिष्ट करने के लिए समाधान को संशोधित करता हूं कि बहुभुज छवि जिसे आप पेस्ट करेंगे, उतना ही बड़ा होगा जितना कि बहुभुज को पकड़ने के लिए आवश्यक है, न कि पिछली छवि के समान आकार। बहुभुज के निर्देशांक स्थानीय बाउंडिंग बॉक्स के संबंध में निर्दिष्ट हैं, न कि वैश्विक छवि निर्देशांक। फिर आप बहुभुज छवि को ऑफसेट पर बड़ी पृष्ठभूमि छवि में पेस्ट करते हैं।

import Image 
import ImageDraw 
img_size = (512,512) 
poly_size = (256,256) 
poly_offset = (128,128) #location in larger image 
back = Image.new('RGBA', img_size, (255,0,0,0)) 
poly = Image.new('RGBA', poly_size) 
pdraw = ImageDraw.Draw(poly) 
pdraw.polygon([ (0,0), (256,256), (0,256), (256,0)], 
       fill=(255,255,255,127), outline=(255,255,255,255)) 
back.paste(poly, poly_offset, mask=poly) 
back.show() 
1

Image.paste (छवि, बॉक्स, मुखौटा) विधि बहुभुज छवि की इसी पारदर्शिता मूल्य में पृष्ठभूमि छवि के चिपकाया क्षेत्र में अल्फ़ा चैनल में परिवर्तित कर देंगे का उपयोग करना।

Image.alpha_composite (IM1, IM2) विधि "चिपकाया" छवि के अल्फ़ा चैनल का इस्तेमाल करता है, और पृष्ठभूमि पारदर्शी चालू नहीं होगा। हालांकि, इस विधि को फिर से दो समान आकार की छवियों की आवश्यकता है।