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

2024-05-29 02:45:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

看起来python标准库中没有一个模块可以做到这一点,但是我发现它有一个PIL模块(PIL.ImageDraw)。

我的问题是我似乎不能让它工作。

所以基本上我的问题是:

  1. 如何在图像上绘制文本。
  2. 如何创建空白(白色)图像
  3. 有没有一种方法可以在不实际创建文件的情况下完成此操作,以便在保存之前可以在GUI中显示它?

谢谢你的帮助:)

当前代码:

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")

Tags: 模块text图像imageimporttxtimgpil
2条回答
  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()
    

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

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

相关问题 更多 >

    热门问题