使用Intervention Image在图片上书写从右到左的文本

3

我想在图片上写一些波斯语或阿拉伯语文本。我使用Intervention Image包来实现,但是文本是反向生成的。如何使文本以正确的(从右到左)方向放置?

$rarticle = Article::first();

$test = storage_path($rarticle->image);
$image = Image::make($test);

$image->text($rarticle->title, 120, 100, function($font) {
    $font->file(base_path('/admin-theme/assets/fonts/yekane.ttf'));
    $font->size(40);
    $font->color('#4285F4');
    $font->align('center');
    $font->valign('bottom');
    $font->angle(0);
});

$image->save(storage_path($rarticle->image));

生成的图片:从左到右书写的文字图像

请参阅项目中的开放问题,该问题要求添加此功能。 - miken32
2个回答

1

我认为你应该下载阿拉伯语包 https://sourceforge.net/projects/i18n-arabic/

并且

require('./I18N/Arabic.php');

// Add styled text to image
$TITLE1 = "محمد مصطفي محمد مصطفي محمد مصطفي ";
$Arabic = new I18N_Arabic('Glyphs');
$text1 = new \NMC\ImageWithText\Text($Arabic->utf8Glyphs($TITLE1), 2);
$text1->align = 'right';
$text1->color = 'FFFFFF';
$text1->font = dirname(__FILE__) . '/I18N/DroidNaskh-Bold.ttf';
$text1->lineHeight = 36;
$text1->size = 24;
$text1->startX = 0;
$text1->startY = 0;
$image->addText($text1);

示例

来源


1

首先安装包eskandari/persianrender:

composer require eskandari/persianrender

然后在您的代码中使用它:

$persian_text_rev = \PersianRender\PersianRender::render('فارسی');

$persian_text = '';
for ($i = mb_strlen($persian_text_rev); $i>=0; $i--) {
    $persian_text .= mb_substr($persian_text_rev, $i, 1);
}

$image->text($persian_text, 120, 100, function($font) {
    $font->file(base_path('/admin-theme/assets/fonts/yekane.ttf'));
    $font->size(40);
    $font->color('#4285F4');
    $font->align('center');
    $font->valign('bottom');
    $font->angle(0);
});


它与阿拉伯语不兼容,字母(ي)会被渲染为(ى),导致其无法正常工作。 - Eyad Mohammed Osama
@EyadMohammedOsama 这个软件包是为波斯语制作和测试的,你是否使用了阿拉伯字体? - Emamie
是的,我做到了!不过,最后我使用了这个包:https://www.ar-php.org/en_index-php-arabic.html - Eyad Mohammed Osama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接