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

如何用Magick实现文字环绕圆形对象添加标注?

实现文字环绕圆形标注(R magick包)

希望在图像中添加文字标注,并让文字环绕圆形对象排列,可在圆形任意位置添加文字(如示例图蓝色箭头指示位置),当前使用的magick代码如下:

library(magick)
img <- image_read('https://www.dropbox.com/s/g91f66zd34rhky3/template_1.png?dl=1')
image_annotate(img, "1345678910110000000000000000000000", font = 'Times', size = 30, location = "+50+150")

示例图像

magick包的image_annotate()本身不支持直接生成环绕圆形的文字,但可以通过两种方式实现需求:

方法1:调用ImageMagick的Arc滤镜生成弧形文字

利用ImageMagick原生的-distort Arc参数,先生成弧形文字图层,再合成到原图:

library(magick)

# 读取原图
img <- image_read('https://www.dropbox.com/s/g91f66zd34rhky3/template_1.png?dl=1')

# 创建透明背景的文字图层,生成弧形文字
text_layer <- image_blank(width = 600, height = 300, color = "none") %>%
  image_annotate(
    text = "1345678910110000000000000000000000",
    font = "Times",
    size = 30,
    color = "black",
    gravity = "center"
  ) %>%
  image_distort(
    method = "Arc",
    arguments = c(180, 0)  # 第一个值为弧形角度(180=半圆,360=整圆),第二个值为起始角度
  )

# 将文字图层合成到原图指定位置,调整offset匹配圆形位置
result <- image_composite(img, text_layer, offset = "+100+200")

# 查看结果
print(result)

方法2:手动计算坐标逐个添加字符(精准控制环绕路径)

如果需要精确控制文字在圆形的任意位置,可以计算每个字符的坐标和旋转角度,逐个添加:

library(magick)

img <- image_read('https://www.dropbox.com/s/g91f66zd34rhky3/template_1.png?dl=1')
text_str <- "1345678910110000000000000000000000"
font_size <- 30
circle_center <- c(300, 200)  # 替换为原图中圆形的中心坐标
circle_radius <- 100          # 替换为原图中圆形的半径
start_angle <- 90             # 文字起始角度(0=右侧,90=顶部,按需调整)

# 拆分文字为单个字符
chars <- strsplit(text_str, "")[[1]]
num_chars <- length(chars)
angle_step <- 360 / num_chars  # 每个字符的角度间隔

# 循环添加每个字符
for (i in 1:num_chars) {
  angle <- start_angle + (i-1)*angle_step
  # 计算字符的位置坐标
  x <- circle_center[1] + circle_radius * cos(angle * pi / 180)
  y <- circle_center[2] + circle_radius * sin(angle * pi / 180)
  # 添加字符并调整旋转角度,让文字垂直于圆形半径
  img <- image_annotate(
    img,
    text = chars[i],
    font = "Times",
    size = font_size,
    location = paste0("+", round(x), "+", round(y)),
    degrees = angle - 90,
    gravity = "center"
  )
}

print(img)

参数调整提示

  • 方法1中,修改arguments的两个数值可以调整弧形的弧度和起始位置,匹配圆形的位置。
  • 方法2中,需要根据原图实际情况修改circle_center、circle_radius和start_angle,实现文字在圆形任意位置的环绕。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:24:15