如何用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
相关产品推荐
相关产品推荐

