2013-04-18 6 views
7

मुझे पीआईएल के ImageDraw मॉड्यूल, विशेष रूप से Draw.textsize विधि के साथ कोई समस्या है। इस विधि को एक स्ट्रिंग और फ़ॉन्ट लेना चाहिए, और उस फ़ॉन्ट में रेंडर होने पर चौड़ाई और ऊंचाई को वापस लेना चाहिए। ऐसा लगता है कि यह ऊंचाई पर कम बाध्य है, हालांकि: मैं 43 से कम कुछ भी वापस करने के लिए इसे मनाने के लिए मना नहीं कर सकता। यहाँ एक उदाहरण (link) को दिखाने के लिए कि मैं क्या (बाउंडिंग लौटे चौड़ाई & ऊंचाई पर आधारित पाठ जिसके चारों ओर बक्से) पर देख रहा हूँ, और यहाँ कोड है कि यह उत्पादन है:पीआईएल ImageDraw.textsize गलत ऊंचाई देता है

from PIL import Image, ImageDraw, ImageFont # PIL 1.1.7; Python 2.6.6 

im = Image.open(r'C:\test\blank.png').convert('RGB') 
draw = ImageDraw.Draw(im) 

TEXTCOLOR = (0, 0, 0) 
X = 10 
Y = 3 

for fontsize in xrange(8, 51): 
    # Other fonts behave the same way 
    font = ImageFont.truetype('Arial.ttf', fontsize) 

    text = 'Hello, World! Size %d' % fontsize 

    width, height = draw.textsize(text, font=font) 
    print 'Font size %d: %d x %d' % (fontsize, width, height) 

    bbox = [(X, Y), (X+width, Y+height)] 
    draw.rectangle(bbox, outline=TEXTCOLOR) 
    draw.text((X, Y), text, font=font, fill=TEXTCOLOR) 
    Y += height + 3 

im.show() 

एक बार फॉन्ट ऊपर हो जाता है आकार 38 के बारे में, बाउंडिंग बॉक्स इसे सही ढंग से मिलान करने के लिए फैला हुआ है, लेकिन इससे पहले, यह एक स्थिर 43 पर सेट है। सवाल यह है कि, क्या किसी को पता है कि ImageDraw इस तरह से क्यों व्यवहार कर रहा है, और क्या किसी को इसे ठीक करने के तरीके के बारे में पता है? मैं वर्तमान में निर्धारित करके समस्या के काम कर रहा हूँ:

width = min(width, fontsize+1) 

... लेकिन यह है कि स्पष्ट रूप से सबसे मजबूत समाधान कभी तैयार नहीं है।

+0

आप जिस पीआईएल मॉड्यूल का उपयोग कर रहे हैं उसे आपने कहाँ प्राप्त किया? जब मैं पाइथन 2.7.3 के तहत अपना कोड चलाने की कोशिश करता हूं तो मुझे 'आयात त्रुटि प्राप्त होती है: _imagingft सी मॉड्यूल स्थापित नहीं है' त्रुटि। – martineau

+0

@ मार्टिनौ मुझे यकीन नहीं है कि मुझे मूल रूप से यह कहां मिला है (मुझे याद है कि यह गर्दन में दर्द होने के बावजूद दर्द है)। मेरे द्वारा उपयोग किए जाने वाले इंस्टॉलर को 'PIL-fork-1.1.7.win32-py2.6.exe' नाम दिया गया है, लेकिन अब ऑनलाइन कोई भाग्य नहीं ढूंढ रहा है। –

+0

'आयात करने वाला' मैं सामना कर रहा हूं एक आम समस्या है, जिसे मैं हल करने की कोशिश कर रहा हूं। जब/अगर मैं करता हूं, तो मैं आपकी समस्या पर एक और नजर डालूंगा। – martineau

उत्तर

2

मूल मुद्दा यह प्रतीत होता है कि पीआईएल सुपर छोटी गाड़ी है और अनिवार्य रूप से अब समर्थित नहीं है। यहां उल्लिखित समस्या सबसे खराब नहीं है (उदा। कोई भी इसे दोहराने में सक्षम नहीं है क्योंकि इसे इंस्टॉल करना भी मुश्किल है ...)।

पीआईएल 1.1.7 में प्रचलित सभी परेशानियों के प्रकाश में, सबसे अच्छा समाधान बस Pillow स्थापित करने और साथ चलने के लिए प्रतीत होता है। इसे कोड के लिए कोड परिवर्तनों की आवश्यकता नहीं है जो पहले से ही पीआईएल चलाता है (यह एक पीआईएल कांटा है, इसलिए यह "पीआईएल" लाइब्रेरी स्थापित करता है), और ऐसा लगता है कि यह काफी दोस्ताना (और अभी भी सक्रिय) है। चूंकि प्रश्न पर टिप्पणीकारों ने पुष्टि की है, यह एक साधारण, मुसीबत मुक्त इंस्टॉल है और यह वास्तव में काम करता है जैसा कि यह माना जाता है।

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