2016-01-04 2 views
6

संपादित: जोड़ा पूरा काम कर उदाहरणअजगर छवि पुस्तकालय - फॉन्ट स्थिति

मैं निम्नलिखित कार्यक्रम है:

from PIL import Image, ImageDraw, ImageFont 

FULL_SIZE = 50 
filename = 'font_test.png' 
font="/usr/share/fonts/truetype/msttcorefonts/arial.ttf" 
text="5" 

image = Image.new("RGBA", (FULL_SIZE, FULL_SIZE), color="grey") 
draw = ImageDraw.Draw(image) 
font = ImageFont.truetype(font, 40) 
font_width, font_height = font.getsize(text) 
draw.rectangle(((0, 0), (font_width, font_height)), fill="black") 
draw.text((0, 0), text, font=font, fill="red") 
image.save(filename, "PNG") 

यह निम्न छवि उत्पन्न करता है:

enter image description here

यह ऐसा लगता है कि पाठ पीआईएल पुस्तकालय लिखते समय शीर्ष पर कुछ मार्जिन जोड़ता है। यह मार्जिन मेरे द्वारा उपयोग किए जाने वाले फ़ॉन्ट पर निर्भर करता है।

पाठ को स्थान देने की कोशिश करते समय मैं इसे कैसे ध्यान में रख सकता हूं (मैं इसे आयताकार के बीच में होना चाहता हूं)?

(Ubuntu 14.04 पर तकिया 2.3.0 के साथ अजगर 2.7.6 का उपयोग करना)

+1

कृपया एक ** पूर्ण ** प्रोग्राम प्रदान करें जो किसी भी 'आयात' कथन सहित त्रुटि प्रदर्शित करता है। –

+1

एक सायन कारण मैं इसके लिए कल्पना कर सकता हूं कि यदि ओपन सेन्स आनुपातिक आंकड़ों का उपयोग करता है, तो इस मामले में मार्जिन एक्स-ऊंचाई और चढ़ाई के बीच अंतर होगा, इस मामले में यह वहां होना चाहिए। एक कम सौहार्दपूर्ण कारण यह है कि किसी कारण से, पीआईएल में पाठ के एक रन के आकार में कुछ प्रकार का "ऑफसेट" जोड़ा जाता है: https://pillow.readthedocs.org/en/3.0.x/_modules/PIL /ImageFont.html। हो सकता है कि आप जो अंतर देख रहे हैं? यह समझाएगा कि काला आयताकार पूरे पत्र के पीछे क्यों नहीं बढ़ता है। – millimoose

+0

जोड़ा गया पूर्ण कामकाजी उदाहरण। – Filip

उत्तर

5

मैं क्यों समझ में नहीं आता, लेकिन y समन्वय से font.getoffset(text)[1] घटाकर अपने कंप्यूटर पर यह ठीक करता है।

from PIL import Image, ImageDraw, ImageFont 

FULL_SIZE = 100 
filename = 'font_posn_test.png' 
fontname = '/usr/share/fonts/truetype/msttcorefonts/arial.ttf' 
textsize = 40 
text = "5" 

image = Image.new("RGBA", (FULL_SIZE, FULL_SIZE)) 
draw = ImageDraw.Draw(image) 
font = ImageFont.truetype(fontname, textsize) 
print font.getoffset(text) 
print font.font.getsize(text) 
font_width, font_height = font.getsize(text) 

font_y_offset = font.getoffset(text)[1] # <<<< MAGIC! 

draw.rectangle(((0, 0), (font_width, font_height)), fill="black") 
draw.text((0, 0 - font_y_offset), text, font=font, fill="red") 
image.save(filename, "PNG") 
+0

यह मेरी समस्या तय! धन्यवाद :) – Filip

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