【问题标题】:Writing text to image in python 2.7 using PIL使用 PIL 在 python 2.7 中将文本写入图像
【发布时间】:2017-08-10 16:42:24
【问题描述】:

编辑: 代码可以工作,但是我有

draw.text((30,10), "Hello World", (255, 255, 255, 255),font=font)

将“Hello World”写为白色。如果你把它改成

draw.text((30,10), "Hello World", (255, 255, 255, 255),font=font)

输入代码“Hello world”将用黑色书写。

我有一个 python 脚本试图将“Hello World”写入 jpg 图像,但是当我保存文件时没有写入任何文本,有什么想法吗? 我正在使用 python 2.7 和 Pillow。

我也看过这个文档:http://pillow.readthedocs.io/en/3.1.x/reference/ImageDraw.html

代码:

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

pattern = Image.open("DANK.jpg", "r").convert('RGBA') 

size = width, height = pattern.size
draw = ImageDraw.Draw(pattern,'RGBA')
font = ImageFont.truetype("Font.ttf", 3)

draw.text((30,10), "Hello World", (255, 255, 255, 255),font=font)
pattern.save('sample-out.jpg')

我还注意到,当图像保存时,颜色会变成灰度,为什么会这样?

【问题讨论】:

    标签: python image-processing text python-imaging-library image-manipulation


    【解决方案1】:

    以下代码对我有用,但我使用的是 python 3 和 png。我将图像放在与代码相同的目录中,然后在图像上写入文本。

    from PIL import Image, ImageDraw, ImageFont
    # get an image
    base = Image.open('lena.png').convert('RGBA')
    
    # make a blank image for the text, initialized to transparent text color
    txt = Image.new('RGBA', base.size, (255,255,255,0))
    
    # get a font
    fnt = ImageFont.truetype('Pillow/Tests/fonts/FreeMono.ttf', 40)
    # get a drawing context
    d = ImageDraw.Draw(txt)
    
    # draw text, half opacity
    d.text((100,100), "Hello", font=fnt, fill=(255,255,255,128))
    # draw text, full opacity
    d.text((100,160), "World", font=fnt, fill=(255,255,255,255))
    
    out = Image.alpha_composite(base, txt)
    
    out.show()
    

    我没有字体,但它似乎也适用于 python 2.7 和 jpg 图像,就像你的代码一样(但我没有字体)

    from PIL import Image
    from PIL import ImageDraw
    from PIL import ImageFont
    
    pattern = Image.open("DANK.jpg", "r").convert('RGBA')
    
    size = width, height = pattern.size
    draw = ImageDraw.Draw(pattern,'RGBA')
    #font = ImageFont.truetype("Font.ttf", 3)
    
    draw.text((30,10), "Hello World", (0, 0, 0, 0))#,font=font)
    pattern.save('sample-out.jpg')
    

    与您的代码(使用我的 Ubuntu 16.04)最相似的是以下代码,它也会在图像上呈现文本。

    from PIL import Image
    from PIL import ImageDraw
    from PIL import ImageFont
    
    pattern = Image.open("DANK.jpg", "r").convert('RGBA')
    
    size = width, height = pattern.size
    draw = ImageDraw.Draw(pattern,'RGBA')
    font = ImageFont.truetype("Pillow/Tests/fonts/FreeMono.ttf", 100)
    
    draw.text((300,10), "Hello World", (0, 0, 0, 0),font=font)
    pattern.save('sample-out.jpg')
    

    【讨论】:

    • 嗨,我意识到我犯错的地方,有 draw.text((30,10), "Hello World", (0, 0, 0, 255),font=font) 要写白色而不是黑色。感谢您的帮助。
    猜你喜欢
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 2019-11-07
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多