gpt4 book ai didi

python - 将文本创建为位图的工具(抗锯齿文本、自定义间距、透明背景)

转载 作者:太空狗 更新时间:2023-10-30 02:06:47 26 4
gpt4 key购买 nike

我需要批量创建带有文本的图像。要求:

  1. 任意大小的位图
  2. PNG格式
  3. 透明背景
  4. 黑色文本消除锯齿以防止透明
  5. 可调字符间距
  6. 可调整的文本位置(文本开始的 x 和 y 坐标)
  7. TrueType 和/或 Type1 支持
  8. Unix 命令行工具或 Python 库

到目前为止,我已经评估了以下内容:

PIL 的问题在于,例如Verdana 的默认间距太稀疏了。我需要文本更紧一点,但在 PIL 中无法调整它。

在 ImageMagick 中,我还没有找到一种简单的方法来指定图像中文本的开始位置(我使用的是 -size WIDTHxHEIGHT 和标题:'TEXT')。添加透明边框会将文本从其锚定的角移开,但是

  • 图像大小需要相应调整,因为边框会增加范围
  • 无法独立调整水平和垂直偏移

我是否错过了一些明显的替代方案或未能从上述提到的中找到必要的功能?

最佳答案

(5) 确实看起来很棘手,缺少在字符串中插入虚拟窄空格(这会破坏字距调整)或使用更高级别的东西,如 SVG 或 HTML/CSS 渲染器。

但是,如果您不介意亲自动手,那么破解 PIL 的 freetype 渲染器以添加水平空间看起来很容易。参见 _imagingft.c ;在 font_getsize 和 font_render 中的以下代码之后:

if (kerning && last_index && index) {
FT_Vector delta;
FT_Get_Kerning(self->face, last_index, index, ft_kerning_default,
&delta);
x += delta.x >> 6;
}

添加:

if (last_index && index) {
x += tracking;
}

首先尝试使用普通整数进行跟踪(根据“>>6”判断可能相当大);编译并查看它是否有效。下一步是将跟踪值从 Python 获取到 C 函数中,为此您必须将 font_render 中的 ParseTuple 调用更改为:

long tracking;
if (!PyArg_ParseTuple(args, "Ol|il:render", &string, &id, &mask, &tracking))
return NULL;

在 font_getsize 中:

long tracking;
if (!PyArg_ParseTuple(args, "O|l:getsize", &string, &tracking))
return NULL;

然后看你要什么Python接口(interface)。这是通过界面的每个级别添加额外的“跟踪”参数的一个微不足道但非常乏味的案例,例如:

def truetype(filename, size, index=0, encoding="", tracking= 0): # added optional tracking
"Load a truetype font file."
try:
return FreeTypeFont(filename, size, index, encoding, tracking) # added tracking
...

class FreeTypeFont:
"FreeType font wrapper (requires _imagingft service)"

def __init__(self, file, size, index=0, encoding="", tracking= 0): # added tracking
import _imagingft
self.font = _imagingft.getfont(file, size, index, encoding)
self.tracking= tracking # add this line

...

def getmask2(self, text, mode="", fill=Image.core.fill):
size, offset = self.font.getsize(text, self.tracking) # use tracking
im = fill("L", size, 0)
self.font.render(text, im.id, mode=="1", self.tracking) # use tracking
return im, offset

我还没有测试过这些!如果有效,可能值得作为补丁提交。

关于python - 将文本创建为位图的工具(抗锯齿文本、自定义间距、透明背景),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/465144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com