You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Elixir中定位文本图像中方括号坐标用于图像合成

获取文本图像中方括号的坐标以用于图像合成

方法一:直接从文本布局数据中提取(推荐)

Image.Text.simple_text!本质是基于文本布局生成图像,你可以先调用Image.Text.layout_text/2获取完整的文本布局信息,其中包含每个字符的精确位置和尺寸:

# 获取文本布局详情
layout = Image.Text.layout_text(
  "This is some text with an [icon] surrounded by square brackets",
  [width: 500, height: 100, font_size: 0, text_fill_color: :black]
)

# 筛选出所有方括号的坐标与尺寸
bracket_info = Enum.filter(layout.glyphs, fn glyph ->
  glyph.character in ["[", "]"]
end) |> Enum.map(fn glyph ->
  %{x: glyph.x, y: glyph.y, width: glyph.width, height: glyph.height}
end)

返回的bracket_info列表中,每个元素包含对应方括号的左上角坐标x/y,以及字符的宽高。这种方法完全基于文本布局计算,精度最高,不会受图像渲染干扰。

方法二:通过图像像素分析定位(备选)

如果已经生成了图像,也可以通过检测像素区域来定位方括号,但需要根据实际背景/文本颜色调整匹配规则,精度略低于布局法:

# 将图像转换为像素二进制数据
{pixels, width, height} = Image.to_binary(image_of_text, :rgba)

# 查找所有黑色文本的像素区域(假设背景为白色,按需调整颜色匹配)
text_regions = Image.Pixel.find_regions(pixels, width, height, fn {r, g, b, a} ->
  r == 0 && g == 0 && b == 0 && a == 255
end)

# 根据方括号的宽高比例筛选目标区域
bracket_coords = Enum.filter(text_regions, fn region ->
  # 方括号的宽度通常远小于高度,可根据实际字体调整比例
  region.width < region.height * 0.4
end) |> Enum.map(fn region -> {region.x, region.y} end)

合成图像的示例

拿到坐标后,直接传入Image.compose!/3即可完成合成,如果需要替换方括号,建议调整图标尺寸匹配方括号的大小:

# 假设已准备好要合成的图标图像icon_image
Enum.each(bracket_info, fn info ->
  # 先调整图标尺寸适配方括号
  resized_icon = Image.resize!(icon_image, info.width, info.height)
  # 在对应位置合成图像
  image_of_text = Image.compose!(image_of_text, resized_icon, at: {info.x, info.y})
end)

内容的提问来源于stack exchange,提问作者Cody Jennings

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 18:12:36