首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在图像上重复生成文本的算法

在图像上重复生成文本的算法
EN

Stack Overflow用户
提问于 2015-07-09 19:37:20
回答 1查看 141关注 0票数 1

使用Python和PIL,我打算在现有图像上绘制文本。

我有一个包含12个部分的图像,并且我有一个数组,如下所示:

代码语言:javascript
运行
复制
array = [
    [1,'ABC'],
    [2,'DEF'],
    [3,'XYZ'],
    [4,'aa1'],
    [1,'pqr'],
    [7,'etc'],
    [3,'klm'],
    [9,'bb'],
    [2,'aa'],
    [10,'xyz'],
    [11,'abc'],
    [1,'def'],
]

现在,根据a[0] for a in array中的数字,我必须将a[1]的文本放在图像的1-12部分。我试过这个:

代码语言:javascript
运行
复制
for a in arr_vals:
    if a[0] == 1:
        draw.text((337, 140), a[1], (231, 76, 60), font=font)
    elif a[0] == 2:
        draw.text((149, 62), a[1], (231, 76, 60), font=font)
    elif a[0] == 3:
        draw.text((337, 156), a[1], (231, 76, 60), font=font)

显然,出现的问题是,比如说在上面的例子中,array[0]array[4]在第一个索引中有相同的值。这将导致在图像中覆盖文字。在这种情况下,我如何防止覆写?在图像上递归放置文本的理想选择是什么?

编辑:

我想要的是:根据数组的不同,红色文本应该出现在12个部分中的任何一个。

生成的当前图像:

如您所见,生成的图像由于代码中相同的位置而使文本重叠。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-09 20:19:13

您可以将您的项目组织到一个集合中,根据相似的区域号对它们进行分组。然后,对于每个区域,您可以通过增加y坐标将每一行文本呈现在第一行之后,因此后面的行出现在前面的行下面,而不是直接放在前面的行上。示例:

代码语言:javascript
运行
复制
array = [
    [1,'ABC'],
    [2,'DEF'],
    [3,'XYZ'],
    [4,'aa1'],
    [1,'pqr'],
    [7,'etc'],
    [3,'klm'],
    [9,'bb'],
    [2,'aa'],
    [10,'xyz'],
    [11,'abc'],
    [1,'def'],
]

d = {}
for item in array:
    d.setdefault(item[0], []).append(item[1])
print d

#d now contains something that looks like:
#{1: ['ABC', 'pqr', 'def'], 2: ['DEF', 'aa'], 3:...}

#height of a single line of text, in pixels.
#I don't know what this should actually be. Depends on your font size, I guess.
line_height = 20

color = (231, 76, 60)
for area in d.iterkeys():
    #somehow get the base coordinates for this particular area.
    #you originally used a lot of if-elifs, but a dict could work too.
    coords = ???
    y_offset = 0
    for line in d[area]:
        draw.text(coords[0], coords[1]+y_offset, line, color, font=font)
        y_offset += line_height
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31326717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档