在python中将字符串转换为图像

时间:2013-07-25 11:04:34

标签: python python-imaging-library

我一周前开始学习python,并想编写一个小程序,将电子邮件转换为图像(.png),以便可以在论坛上共享,而不会冒很多垃圾邮件的风险。

似乎python标准库不包含可以执行此操作的模块,但我发现它有一个PIL模块(PIL.ImageDraw)。

我的问题是我似乎无法让它发挥作用。

基本上我的问题是:

  1. 如何在图像上绘制文字。
  2. 如何创建空白(白色)图像
  3. 有没有办法在没有实际创建文件的情况下执行此操作,以便在保存之前我可以在GUI中显示它?
  4. 感谢您的帮助:)

    当前代码:

    import Image
    import ImageDraw
    import ImageFont
    
    def getSize(txt, font):
        testImg = Image.new('RGB', (1, 1))
        testDraw = ImageDraw.Draw(testImg)
        return testDraw.textsize(txt, font)
    
    if __name__ == '__main__':
    
        fontname = "Arial.ttf"
        fontsize = 11   
        text = "example@gmail.com"
    
        colorText = "black"
        colorOutline = "red"
        colorBackground = "white"
    
    
        font = ImageFont.truetype(fontname, fontsize)
        width, height = getSize(text, font)
        img = Image.new('RGB', (width+4, height+4), colorBackground)
        d = ImageDraw.Draw(img)
        d.text((2, height/2), text, fill=colorText, font=font)
        d.rectangle((0, 0, width+3, height+3), outline=colorOutline)
    
        img.save("D:/image.png")
    

2 个答案:

答案 0 :(得分:21)

  1. 使用ImageDraw.text - 但它不进行任何格式化,只是在给定位置打印字符串

    img = Image.new('RGB', (200, 100))
    d = ImageDraw.Draw(img)
    d.text((20, 20), 'Hello', fill=(255, 0, 0))
    

    找出文字大小:

    text_width, text_height = d.textsize('Hello')
    
  2. 创建图像时,添加一个具有所需颜色(白色)的附加参数:

    img = Image.new('RGB', (200, 100), (255, 255, 255))
    
  3. 直到用Image.save方法保存图像,才会有文件。然后,只需将其转换为GUI的显示格式即可进行适当的转换。这可以通过将图像编码到内存中的图像文件来完成:

    import cStringIO
    s = cStringIO.StringIO()
    img.save(s, 'png')
    in_memory_file = s.getvalue()
    

    然后可以将其发送到GUI。或者您可以发送直接原始位图数据:

    raw_img_data = img.tostring()
    

答案 1 :(得分:0)

当我没记错的时候,前三行并不完整。正确的代码是:

from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont