用于节点的GraphicsMagick中的Unicode drawText“从右到左”语言问题

时间:2015-07-31 18:49:55

标签: graphicsmagick

我正在使用GraphicsMagick for node并试图在图像上绘制文字“乌尔都语/阿拉伯语”这个文字“السلامعليكم”,文字正在输出图像上绘制,但它被绘制为“从左到右”而它必须阿拉伯语/乌尔都语是“从右到左”的语言。

gm("/file.png")
             .fill('#FF0066')
             .drawText(100, -150, "السلام عليكم", 'Center')
             .font("/alvi_Nastaleeq.ttf")
             .fontSize('38px')
             .encoding('Unicode')

输出图片:

enter image description here

如果我尝试使用反向urdu“مكيلعمالسلا”字符串,即使文本没有正确绘制。

enter image description here

我做错了什么?我该如何解决?

谢谢,

2 个答案:

答案 0 :(得分:2)

我正在寻找同样的事情而且我发现了 您需要启用 text_shaping 选项
您需要使用 - enable-libfribidi 配置FFmpeg
在这里阅读text_shaping
https://ffmpeg.org/ffmpeg-filters.html#Syntax
我没有测试它,但我会, 当我得到一个结果时,我会在这里发布代码 我希望我已经指出你了 这是我用来制作这样的视频的工作代码 enter image description here

ffmpeg -y -loop 1 -framerate 25 -i bachground-img.jpg -vf "drawtext=text_shaping=1:fontfile=C\/:/Windows/Fonts/tradbdo.ttf:\
textfile=text-new.txt:fontcolor=white:fontsize=75:x=(w-tw)/2:y=h-25*t:" -t 45 -pix_fmt yuv420p output.mp4

答案 1 :(得分:0)

我面临着完全相同的问题,经过几天的搜索,我找到了一个很好的 npm 库来解决这个问题,这个库的好处是它可以同时使用英语和阿拉伯语。

图书馆是:@mapbox/mapbox-gl-rtl-text

https://www.npmjs.com/package/@mapbox/mapbox-gl-rtl-text

const rtlText = require('@mapbox/mapbox-gl-rtl-text');

var arabicString = "السلام عليكم";
var shapedArabicText = rtlText.applyArabicShaping(arabicString);
var readyForDisplay = rtlText.processBidirectionalText(shapedArabicText, []);