2012-06-21 116 views
3

我想繪製某些unicode字符和圖像使用python(精確到PIL)。如何在PIL中的透明圖像上繪製unicode字符

使用以下代碼我可以生成具有白色背景的圖像:

( 'entity_code' 被傳遞給該方法)

size = self.font.getsize(entity_code) 
    im = Image.new("RGBA", size, (255,255,255)) 
    draw = ImageDraw.Draw(im) 
    draw.text((0,6), entity_code, font=self.font, fill=(0,0,0)) 
    del draw 
    img_buffer = StringIO() 
    im.save(img_buffer, format="PNG") 

我嘗試以下:

( 'entity_code'傳入該方法)

img = Image.new('RGBA',(100, 100)) 
    draw = ImageDraw.Draw(img) 
    draw.text((0,6), entity_code, fill=(0,0,0), font=self.font) 
    img_buffer = StringIO() 
    img.save(img_buffer, 'GIF', transparency=0) 

但是, s畫出unicode字符。它看起來像我結束了一個空的透明圖像:(

我是什麼在這裏失蹤?有沒有更好的辦法在python畫一個透明圖像上的文字?

回答

0

在你的例子,你創建一個RGBA形象,但你沒有特異性y alpha通道的值(因此它默認爲255)。如果您將(255, 255, 255)替換爲(255,255,255,0),它應該可以正常工作(因爲具有0 alpha的像素是透明的)。

舉例說明:

import Image 
im = Image.new("RGBA", (200,200), (255,255,255)) 
print im.getpixel((0,0)) 
im2 = Image.new("RGBA", (200,200), (255,255,255,0)) 
print im2.getpixel((0,0)) 
#Output: 
(255, 255, 255, 255) 
(255, 255, 255, 0) 
2

你的代碼示例是所有的地方,和我比較,你是不是在填充顏色的使用和背景顏色是不夠具體@fraxel同意你的RGBA圖像。然而,我實際上無法讓你的代碼示例工作,因爲我真的不知道你的代碼如何配合在一起。

此外,就像@monkut提到你需要看看你使用的字體,因爲你的字體可能不支持特定的Unicode字符。但是,不支持的字符應該繪製爲空方塊(或任何默認值),因此您至少會看到某種輸出。

我在下面創建了一個簡單的例子,它繪製了unicode字符並將它們保存爲.png文件。

import Image,ImageDraw,ImageFont 

# sample text and font 
unicode_text = u"Unicode Characters: \u00C6 \u00E6 \u00B2 \u00C4 \u00D1 \u220F" 
verdana_font = ImageFont.truetype("verdana.ttf", 20, encoding="unic") 

# get the line size 
text_width, text_height = verdana_font.getsize(unicode_text) 

# create a blank canvas with extra space between lines 
canvas = Image.new('RGB', (text_width + 10, text_height + 10), (255, 255, 255)) 

# draw the text onto the text canvas, and use black as the text color 
draw = ImageDraw.Draw(canvas) 
draw.text((5,5), unicode_text, font = verdana_font, fill = "#000000") 

# save the blank canvas to a file 
canvas.save("unicode-text.png", "PNG") 

上面的代碼創建下面顯示的PNG: unicode text

作爲一個方面說明,我在Windows上使用弼1.1.7和Python 2.7.3。