3

I Want to write some Persian or Arabic text on an image. I used the Intervention Image package for doing that, but the text was generated in reverse. How can I have the text placed in the correct (right to left) direction?

$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));

The generated image: image showing text written left to right

miken32
  • 42,008
  • 16
  • 111
  • 154
  • See also this [open issue](https://github.com/Intervention/image/issues/630) on the project asking for this feature. – miken32 Oct 19 '22 at 20:29

2 Answers2

1

I think you should download Arabic package https://sourceforge.net/projects/i18n-arabic/

and

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);

Example

source

Meysam M
  • 56
  • 5
1

First install package eskandari/persianrender:

composer require eskandari/persianrender

Then use it in your code :

$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);
});

Emamie
  • 2,792
  • 1
  • 19
  • 17