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

如何用R的magick包正确添加阿拉伯语、波斯语等RTL语言图片注释?

解决magick包波斯语(RTL)注释显示为LTR的问题

magick的image_annotate对从右到左(RTL)语言的排版支持有限,即使指定波斯语字体也可能出现文本顺序错乱的情况,以下是几种可行的解决方法:

方法1:用bidi包预处理RTL文本

先将波斯语文本转换为正确的视觉排版顺序,再添加到图片上:

  1. 安装并加载bidi包:
install.packages("bidi")
library(bidi)
  1. 处理文本后调用image_annotate:
library(magick)

# 转换RTL文本为正确视觉顺序
persian_text <- bidi_reorder("تعداد ساعات روز", direction = "RTL")

# 生成带注释的图片
image_append(c(white_space, img), stack = TRUE) %>% 
    image_annotate(
      text = persian_text, 
      size = 30, 
      gravity = "North",
      font = "C:\\Users\\User1\\AppData\\Local\\Microsoft\\Windows\\Fonts\\BNazanin.ttf"
    )

方法2:配置ImageMagick的UTF-8编码支持

确保ImageMagick版本在7.0.10及以上(该版本开始支持双向文本),并在调用时指定编码:

image_append(c(white_space, img), stack = TRUE) %>% 
    image_annotate(
      text = "تعداد ساعات روز", 
      size = 30, 
      gravity = "North",
      font = "C:\\Users\\User1\\AppData\\Local\\Microsoft\\Windows\\Fonts\\BNazanin.ttf",
      encoding = "UTF-8"
    )

方法3:使用系统字体名称而非文件路径

直接指定字体的系统显示名称(比如BNazanin的系统名称通常是"B Nazanin"),可能比文件路径更可靠:

image_append(c(white_space, img), stack = TRUE) %>% 
    image_annotate(
      text = bidi_reorder("تعداد ساعات روز", direction = "RTL"),
      size = 30, 
      gravity = "North",
      font = "B Nazanin"
    )

内容的提问来源于stack exchange,提问作者a.sa.5969

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:13:19