• 0
linux web man

درس : كيفية الكتابة باللغة العربية على الصور

سؤال

السلام عليكم و رحمة الله وبركاته.

تقدم مكتبة GD دوال و ادوات هامة للتعديل على الصور كإنشاء صور المصغرات او قص جزء من الصورة و تطبيق مجموعة من الفلاتر الجاهزة او الكتابة على الصورة ..الخ

المشكلة الاساسية للمبرمج العربي هي عدم دعم مكتبة GD للغة العربية فستكون الكتابة بشكل حروف مقطعة وليس كما يفترض ان تكون, فمثلا الكود التالي


<?php
header('Content-Type: image/png');
$image = imagecreatetruecolor(200, 75);
imagefill($image, 0, 0, 0xaaaaaa);
$text = 'العربية';
imagettftext($image, 25, 0, 20, 50, 0x000000, 'arial.ttf', $text);
imagepng($image);
?>

الناتج عن الكود السابق هو

post-268329-027433900 1352202309.txt

لكن يمكن الكتابة على الصورة السابقة بطريقة اخرى وبشكل سليم باستخدام "رموز اليونيكود" وذلك على الشكل التالي


<?php
header('Content-Type: image/png');
$image = imagecreatetruecolor(200, 75);
imagefill($image, 0, 0, 0xaaaaaa);
$text = 'ﺔﻴﺑﺮﻌﻟﺍ';
imagettftext($image, 25, 0, 20, 50, 0x000000, 'arial.ttf', $text);
imagepng($image);
?>

وينتج عن الكود السابق الصورة التالية :

post-268329-032659500 1352202327_thumb.p

في الكود السابق تم استبال كلمة "العربية" بـ "ﺔﻴﺑﺮﻌﻟﺍ"

كيف تم ذلك؟؟!! لكل وضعيات المحارف في اي لغة "رموز يونيكود" خاصة بها فمثلا حرف الياء يأتي بأربع وضعيات :

الأولى في اول الكلمة : يـ و رمزها "FEF3"

الثانية في وسط الكلمة : ـيـ و رمزها "FEF4"

الثالثة في اخر الكلمة : ـي ورمزها "FEF2"

الرابعة "معزولة أو مفردة" : ي ورمزها "FEF1"

للاطلاع على القائمة الكاملة لجميع محارف اللغة العربية :

http://en.wikipedia.org/wiki/Arabic_script_in_Unicode

فيلزم لكتابة كلمة "العربية" ان تكون الالف معزولة و اللام في اول الكلمة و العين في وسط الكلمة ثم الراء في اخر الكلمة ثم الباء في اول الكلمة ثم الياء في وسط الكلمة ثم التاء المربوطة في اخر الكلمة

ملاحظة : "اول الكلمة وسط الكلمة اخر الكلمة " لاتدل على الموقع الفعلي للحرف وانما على وضعه. :happy:

طبعا عملية تحويل كل كلمة الى هذا الشكل يدويا تأخد وقت طويل و في بعض الاماكن يلزم توليد الكلمة فوريا "سكربت لتصمميم لوغو أو كتابة الكلمة في صورة لاستخدامها في كابتشا"

لذلك يمكن استخدام الكود التالي الذي قمت ببرمجته


<?php
/**
* word2uni
* This code is a part of aCAPTCHA project, This copyright notice MUST stay intact for use
* @package aCAPTCHA
* @author Abd Allatif Eymsh
* @copyright (c) 2012
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*/
function word2uni($word)
{

$new_word = array();
$char_type = array();
$isolated_chars = array('ا', 'د', 'ذ', 'أ', 'آ', 'ر', 'ؤ', 'ء', 'ز', 'و', 'ى', 'ة');

$all_chars = array
(
'ا' => array(

'middle' => 'ﺎ',

'isolated' => 'ﺍ'
),

'ؤ' => array(

'middle' => 'ﺅ',

'isolated' => 'ﺆ'
),
'ء' => array(
'middle' => 'ﺀ',
'isolated' => 'ﺀ'
),
'أ' => array(

'middle' => 'ﺄ',

'isolated' => 'ﺃ'
),
'آ' => array(

'middle' => 'ﺂ',

'isolated' => 'ﺁ'
),
'ى' => array(

'middle' => 'ﻰ',

'isolated' => 'ﻯ'
),
'ب' => array(
'beginning' => 'ﺑ',
'middle' => 'ﺒ',
'end' => 'ﺐ',
'isolated' => 'ﺏ'
),
'ت' => array(
'beginning' => 'ﺗ',
'middle' => 'ﺘ',
'end' => 'ﺖ',
'isolated' => 'ﺕ'
),
'ث' => array(
'beginning' => 'ﺛ',
'middle' => 'ﺜ',
'end' => 'ﺚ',
'isolated' => 'ﺙ'
),
'ج' => array(
'beginning' => 'ﺟ',
'middle' => 'ﺠ',
'end' => 'ﺞ',
'isolated' => 'ﺝ'
),
'ح' => array(
'beginning' => 'ﺣ',
'middle' => 'ﺤ',
'end' => 'ﺢ',
'isolated' => 'ﺡ'
),
'خ' => array(
'beginning' => 'ﺧ',
'middle' => 'ﺨ',
'end' => 'ﺦ',
'isolated' => 'ﺥ'
),
'د' => array(
'middle' => 'ﺪ',
'isolated' => 'ﺩ'
),
'ذ' => array(
'middle' => 'ﺬ',
'isolated' => 'ﺫ'
),
'ر' => array(
'middle' => 'ﺮ',
'isolated' => 'ﺭ'
),
'ز' => array(
'middle' => 'ﺰ',
'isolated' => 'ﺯ'
),
'س' => array(
'beginning' => 'ﺳ',
'middle' => 'ﺴ',
'end' => 'ﺲ',
'isolated' => 'ﺱ'
),
'ش' => array(
'beginning' => 'ﺷ',
'middle' => 'ﺸ',
'end' => 'ﺶ',
'isolated' => 'ﺵ'
),
'ص' => array(
'beginning' => 'ﺻ',
'middle' => 'ﺼ',
'end' => 'ﺺ',
'isolated' => 'ﺹ'
),
'ض' => array(
'beginning' => 'ﺿ',
'middle' => 'ﻀ',
'end' => 'ﺾ',
'isolated' => 'ﺽ'
),
'ط' => array(
'beginning' => 'ﻃ',
'middle' => 'ﻄ',
'end' => 'ﻂ',
'isolated' => 'ﻁ'
),
'ظ' => array(
'beginning' => 'ﻇ',
'middle' => 'ﻈ',
'end' => 'ﻆ',
'isolated' => 'ﻅ'
),
'ع' => array(
'beginning' => 'ﻋ',
'middle' => 'ﻌ',
'end' => 'ﻊ',
'isolated' => 'ﻉ'
),
'غ' => array(
'beginning' => 'ﻏ',
'middle' => 'ﻐ',
'end' => 'ﻎ',
'isolated' => 'ﻍ'
),
'ف' => array(
'beginning' => 'ﻓ',
'middle' => 'ﻔ',
'end' => 'ﻒ',
'isolated' => 'ﻑ'
),
'ق' => array(
'beginning' => 'ﻗ',
'middle' => 'ﻘ',
'end' => 'ﻖ',
'isolated' => 'ﻕ'
),
'ك' => array(
'beginning' => 'ﻛ',
'middle' => 'ﻜ',
'end' => 'ﻚ',
'isolated' => 'ﻙ'
),
'ل' => array(
'beginning' => 'ﻟ',
'middle' => 'ﻠ',
'end' => 'ﻞ',
'isolated' => 'ﻝ'
),
'م' => array(
'beginning' => 'ﻣ',
'middle' => 'ﻤ',
'end' => 'ﻢ',
'isolated' => 'ﻡ'
),
'ن' => array(
'beginning' => 'ﻧ',
'middle' => 'ﻨ',
'end' => 'ﻦ',
'isolated' => 'ﻥ'
),
'ه' => array(
'beginning' => 'ﻫ',
'middle' => 'ﻬ',
'end' => 'ﻪ',
'isolated' => 'ﻩ'
),
'و' => array(
'middle' => 'ﻮ',
'isolated' => 'ﻭ'
),
'ي' => array(
'beginning' => 'ﻳ',
'middle' => 'ﻴ',
'end' => 'ﻲ',
'isolated' => 'ﻱ'
),
'ئ' => array(
'beginning' => 'ﺋ',
'middle' => 'ﺌ',
'end' => 'ﺊ',
'isolated' => 'ﺉ'
),
'ة' => array(
'middle' => 'ﺔ',
'isolated' => 'ﺓ'
)
);

if(in_array($word[0].$word[1], $isolated_chars))
{
$new_word[] = $all_chars[$word[0].$word[1]]['isolated'];
$char_type[] = 'not_normal';
}
else
{
$new_word[] = $all_chars[$word[0].$word[1]]['beginning'];
$char_type[] = 'normal';
}

if(strlen($word) > 4)
{
if($char_type[0] == 'not_normal')

{
if(in_array($word[2].$word[3], $isolated_chars))
{
$new_word[] = $all_chars[$word[2].$word[3]]['isolated'];
$char_type[] = 'not_normal';
}
else
{

$new_word[] = $all_chars[$word[2].$word[3]]['beginning'];
$char_type[] = 'normal';
}
}
else
{
$new_word[] = $all_chars[$word[2].$word[3]]['middle'];
$chars_statue[] = 'middle';

if(in_array($word[2].$word[3], $isolated_chars))
{
$char_type[] = 'not_normal';
}
else
{
$char_type[] = 'normal';
}
}
$x = 4;
}
else
{
$x = 2;
}

for($x=4;$x< (strlen($word)-4) ;$x++)
{
if($char_type[count($char_type)-1] == 'not_normal' AND $x %2 == 0)
{
if(in_array($word[$x].$word[$x+1], $isolated_chars))
{

$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];
$char_type[] = 'not_normal';
}
else
{

$new_word[] = $all_chars[$word[$x].$word[$x+1]]['beginning'];
$char_type[] = 'normal';
}
}
elseif($char_type[count($char_type)-1] == 'normal' AND $x %2 == 0)
{

if(in_array($word[$x].$word[$x+1], $isolated_chars))
{

$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];
$char_type[] = 'not_normal';
}
else
{

$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];
$char_type[] = 'normal';
}
}

}
if(strlen($word)>6)
{
if($char_type[count($char_type)-1] == 'not_normal')
{
if(in_array($word[$x].$word[$x+1], $isolated_chars))
{

$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];
$char_type[] = 'not_normal';
}
else
{

if($word[strlen($word)-2].$word[strlen($word)-1] == 'ء')
{
$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];
$char_type[] = 'normal';
}
else
{
$new_word[] = $all_chars[$word[$x].$word[$x+1]]['beginning'];
$char_type[] = 'normal';
}

}

$x += 2;
}
elseif($char_type[count($char_type)-1] == 'normal')
{

if(in_array($word[$x].$word[$x+1], $isolated_chars))
{

$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];
$char_type[] = 'not_normal';
}
else
{

$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];
$char_type[] = 'normal';
}

$x += 2;
}


}

if($char_type[count($char_type)-1] == 'not_normal')
{

if(in_array($word[$x].$word[$x+1], $isolated_chars))
{

$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];

}
else
{
$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];

}

}
else
{
if(in_array($word[$x].$word[$x+1], $isolated_chars))
{

$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];

}
else
{

$new_word[] = $all_chars[$word[$x].$word[$x+1]]['end'];

}
}

return implode('',array_reverse($new_word));
}
?>

اذا اردت ان تقوم بكتابة كلمة معينة قم بتضمين هذا الملف في ملف ال php وثم بدل السطر


$text = 'العربية';

بـ


$text = word2uni('العربية');

لكن يجب الانتباه الى ترميز الملف يجب ان يكون utf-8 حصرا

الدالة هي جزء من مشروعي للكابتشا وفق الرخصة GUN GPL v2

لتحميل المثال :

word2uni.zip

اتمنى ان يكون مفيدا :happy:

4

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

24 إجابة على هذا السؤال .

  • 0

السلام عليكم

فعلاً أحييك على هذا المجهود الرائع

بارك الله فيك ودائماً في تقدم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

رائع اخي الكريم شكرا على مجهودك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ما شاء الله اخي الفاضل

الان الامور صارت رهيبة جداً , بحييك على المجهود الاكثر من رائع صراحة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم اخواني و شكرا لكم هذه الاطراءات . :blush:

لكنني وجدت سطر زائد نسيت ان امسحه هو السطر 250 :huh:


$chars_statue[] = 'middle';

فلا داعي له لانه لا يقوم باي عمل :happy:

تحياتي .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أهلا عزيزي Linux Web Man

طبعا احييك على مجهودك الرائع وتفانيك في العمل .

في الحقيقة اطلعت على كودك اطلاع , ولكن بما اننا دخلنا في الامور الجدية التي تتطلع المتابعة من الجميع , فقد قمت بفحص الكود لتتبع المشكلة الحالية

وهي ان شاء الله مشكلة بسيطة تتعلق بالتركيبة ( لا , لآ , لأ )

بما انك كونت مصفوفة بالأحرف و اماكن تواجدها بالكلمات ينبغي ان نهتم بالاحرف التي جمعت في تركيبة واحدة وهي لأ ، لا ، لآ , طبعا بكافة حالتها ايضا

ويجب ان تعامل على انها حرف واحد اذن ان لها HTML ENTITY UNICODE خاص بها .

 ﻵ : ﻵ
ﻶ : ﻶ
ﻷ : ﻷ
ﻸ : ﻸ
ﻹ : ﻹ
ﻺ : ﻺ
ﻻ : ﻻ
ﻼ : ﻼ

مثال : كلمة الأخضر

الالجورثيم المتبع : إذا كان الحرف الحالي هو ( ل ) و الحرف التالي هو ( أ ) إذن التركيبة الحرفية ( تعتبر حرف واحد ) هي ( لأ ) ونعتبر ﻷ ممثلا لها هذا إذا كان الحرف معزولاً Isolated

ففي هذه الحالة يكون اما معزولا ً او يكون في على الشكل بآخر الكلمة Endform

ننتظر التحديث اللازم لهذه الأحرف اخي الفاضل وبارك الله في جهودك

تم تعديل بواسطه Hamdan Taima
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

وجدت هذا المقال في شرح وافي لكل اليونيكود العربي

http://ar.wikipedia.org/wiki/%D9%8A%D9%88%D9%86%D9%8A%D9%83%D9%88%D8%AF_%D8%B9%D8%B1%D8%A8%D9%8A

اتمنى الفائدة

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

وجدت هذا المقال في شرح وافي لكل اليونيكود العربي

http://ar.wikipedia.org/wiki/%D9%8A%D9%88%D9%86%D9%8A%D9%83%D9%88%D8%AF_%D8%B9%D8%B1%D8%A8%D9%8A

اتمنى الفائدة

شكرا لك اخي إن شاء الله سيتم التعديل قريبا

تحياتي .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تم تصحيح المشكلة التي تحدث عنها الأخ حمدان بتصحيح ملف word2uni.php


<?php
/**
* word2uni
* This code is a part of aCAPTCHA project, This copyright notice MUST stay intact for use
* @package aCAPTCHA
* @author Abd Allatif Eymsh
* @copyright (c) 2012
* @param string $word
* @license http://opensource.org/licenses/gpl-license.php GNU General Public License v2
*/
function word2uni($word)
{

$new_word = array();
$char_type = array();
$isolated_chars = array('ا', 'د', 'ذ', 'أ', 'آ', 'ر', 'ؤ', 'ء', 'ز', 'و', 'ى', 'ة', 'إ');
$alef = array('أ','ا','إ','آ');
$lam = array('ل');
$al_char = array();
$all_chars = array
(
'ا' => array(
'la_beg' => 'ﻻ',
'la_end' => 'ﻼ',
'middle' => 'ﺎ',

'isolated' => 'ﺍ'
),
'إ' => array(
'la_beg' => 'ﻹ',
'la_end' => 'ﻺ',
'middle' => 'ﺈ',

'isolated' => 'ﺇ'
),

'ؤ' => array(

'middle' => 'ﺅ',

'isolated' => 'ﺆ'
),
'ء' => array(
'middle' => 'ﺀ',
'isolated' => 'ﺀ'
),
'أ' => array(
'la_beg' => 'ﻷ',
'la_end' => 'ﻸ',
'middle' => 'ﺄ',

'isolated' => 'ﺃ'
),
'آ' => array(
'la_beg' => 'ﻵ',
'la_end' => 'ﻶ',
'middle' => 'ﺂ',

'isolated' => 'ﺁ'
),
'ى' => array(

'middle' => 'ﻰ',

'isolated' => 'ﻯ'
),
'ب' => array(
'beginning' => 'ﺑ',
'middle' => 'ﺒ',
'end' => 'ﺐ',
'isolated' => 'ﺏ'
),
'ت' => array(
'beginning' => 'ﺗ',
'middle' => 'ﺘ',
'end' => 'ﺖ',
'isolated' => 'ﺕ'
),
'ث' => array(
'beginning' => 'ﺛ',
'middle' => 'ﺜ',
'end' => 'ﺚ',
'isolated' => 'ﺙ'
),
'ج' => array(
'beginning' => 'ﺟ',
'middle' => 'ﺠ',
'end' => 'ﺞ',
'isolated' => 'ﺝ'
),
'ح' => array(
'beginning' => 'ﺣ',
'middle' => 'ﺤ',
'end' => 'ﺢ',
'isolated' => 'ﺡ'
),
'خ' => array(
'beginning' => 'ﺧ',
'middle' => 'ﺨ',
'end' => 'ﺦ',
'isolated' => 'ﺥ'
),
'د' => array(
'middle' => 'ﺪ',
'isolated' => 'ﺩ'
),
'ذ' => array(
'middle' => 'ﺬ',
'isolated' => 'ﺫ'
),
'ر' => array(
'middle' => 'ﺮ',
'isolated' => 'ﺭ'
),
'ز' => array(
'middle' => 'ﺰ',
'isolated' => 'ﺯ'
),
'س' => array(
'beginning' => 'ﺳ',
'middle' => 'ﺴ',
'end' => 'ﺲ',
'isolated' => 'ﺱ'
),
'ش' => array(
'beginning' => 'ﺷ',
'middle' => 'ﺸ',
'end' => 'ﺶ',
'isolated' => 'ﺵ'
),
'ص' => array(
'beginning' => 'ﺻ',
'middle' => 'ﺼ',
'end' => 'ﺺ',
'isolated' => 'ﺹ'
),
'ض' => array(
'beginning' => 'ﺿ',
'middle' => 'ﻀ',
'end' => 'ﺾ',
'isolated' => 'ﺽ'
),
'ط' => array(
'beginning' => 'ﻃ',
'middle' => 'ﻄ',
'end' => 'ﻂ',
'isolated' => 'ﻁ'
),
'ظ' => array(
'beginning' => 'ﻇ',
'middle' => 'ﻈ',
'end' => 'ﻆ',
'isolated' => 'ﻅ'
),
'ع' => array(
'beginning' => 'ﻋ',
'middle' => 'ﻌ',
'end' => 'ﻊ',
'isolated' => 'ﻉ'
),
'غ' => array(
'beginning' => 'ﻏ',
'middle' => 'ﻐ',
'end' => 'ﻎ',
'isolated' => 'ﻍ'
),
'ف' => array(
'beginning' => 'ﻓ',
'middle' => 'ﻔ',
'end' => 'ﻒ',
'isolated' => 'ﻑ'
),
'ق' => array(
'beginning' => 'ﻗ',
'middle' => 'ﻘ',
'end' => 'ﻖ',
'isolated' => 'ﻕ'
),
'ك' => array(
'beginning' => 'ﻛ',
'middle' => 'ﻜ',
'end' => 'ﻚ',
'isolated' => 'ﻙ'
),
'ل' => array(
'beginning' => 'ﻟ',
'middle' => 'ﻠ',
'end' => 'ﻞ',
'isolated' => 'ﻝ'
),
'م' => array(
'beginning' => 'ﻣ',
'middle' => 'ﻤ',
'end' => 'ﻢ',
'isolated' => 'ﻡ'
),
'ن' => array(
'beginning' => 'ﻧ',
'middle' => 'ﻨ',
'end' => 'ﻦ',
'isolated' => 'ﻥ'
),
'ه' => array(
'beginning' => 'ﻫ',
'middle' => 'ﻬ',
'end' => 'ﻪ',
'isolated' => 'ﻩ'
),
'و' => array(
'middle' => 'ﻮ',
'isolated' => 'ﻭ'
),
'ي' => array(
'beginning' => 'ﻳ',
'middle' => 'ﻴ',
'end' => 'ﻲ',
'isolated' => 'ﻱ'
),
'ئ' => array(
'beginning' => 'ﺋ',
'middle' => 'ﺌ',
'end' => 'ﺊ',
'isolated' => 'ﺉ'
),
'ة' => array(
'middle' => 'ﺔ',
'isolated' => 'ﺓ'
)
);

if(in_array($word[0].$word[1], $isolated_chars))
{
$new_word[] = $all_chars[$word[0].$word[1]]['isolated'];
$char_type[] = 'not_normal';
$al_char[] = false;
}
else
{
if(in_array($word[0].$word[1], $lam) AND in_array($word[2].$word[3], $alef))
{
$new_word[] = $all_chars [$word[2].$word[3]]['la_beg'];
$char_type[] = 'not_normal';

$al_char[] = true;
}
else
{

$new_word[] = $all_chars[$word[0].$word[1]]['beginning'];
$char_type[] = 'normal';
$al_char[] = false;
}

}

if(strlen($word) > 4)
{
if($char_type[0] == 'not_normal')

{
if(in_array($word[2].$word[3], $isolated_chars))
{
if($al_char[count($al_char)-1] == false)
{
$new_word[] = $all_chars[$word[2].$word[3]]['isolated'];
$char_type[] = 'not_normal';

}
$al_char[] = false;

}
else
{
if(in_array($word[2].$word[3], $lam) AND in_array($word[4].$word[5], $alef))
{
$new_word[] = $all_chars[$word[4].$word[5]]['la_beg'];
$char_type[] = 'not_normal';
$al_char[] = true;
}
else
{
$new_word[] = $all_chars[$word[2].$word[3]]['beginning'];
$char_type[] = 'normal';
$al_char[] = false;
}

}
}
else
{
if(in_array($word[2].$word[3], $lam) AND in_array($word[4].$word[5], $alef))
{

$new_word[] = $all_chars[$word[4].$word[5]]['la_end'];
$char_type[] = 'not_normal';
$al_char[] = true;
}
else
{
$new_word[] = $all_chars[$word[2].$word[3]]['middle'];
if(in_array($word[2].$word[3], $isolated_chars))
{
$char_type[] = 'not_normal';
$al_char[] = false;
}
else
{
$char_type[] = 'normal';
$al_char[] = false;
}
}

}
$x = 4;
}
else
{
$x = 2;
}

for($x=4;$x< (strlen($word)-4) ;$x++)
{
if($char_type[count($char_type)-1] == 'not_normal' AND $x %2 == 0)
{
if(in_array($word[$x].$word[$x+1], $isolated_chars))
{
if($al_char[count($al_char)-1] == false)
{
$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];
$char_type[] = 'not_normal';

}
$al_char[] = false;
}
elseif(in_array($word[$x].$word[$x+1], $lam) AND in_array($word[$x+2].$word[$x+3], $alef))
{

$new_word[] = $all_chars[$word[$x+2].$word[$x+3]]['la_beg'];
$char_type[] = 'not_normal';
$al_char[] = true;
}
else
{

$new_word[] = $all_chars[$word[$x].$word[$x+1]]['beginning'];
$char_type[] = 'normal';
$al_char[] = false;
}
}
elseif($char_type[count($char_type)-1] == 'normal' AND $x %2 == 0)
{

if(in_array($word[$x].$word[$x+1], $isolated_chars))
{
if($al_char[count($al_char)-1] == false)
{
$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];
$char_type[] = 'not_normal';
}
$al_char[] = false;
}
elseif(in_array($word[$x].$word[$x+1], $lam) AND in_array($word[$x+2].$word[$x+3], $alef))
{

$new_word[] = $all_chars[$word[$x+2].$word[$x+3]]['la_end'];
$char_type[] = 'not_normal';
$al_char[] = true;
}
else
{

$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];
$char_type[] = 'normal';
$al_char[] = false;
}
}

}
if(strlen($word)>6)
{
if($char_type[count($char_type)-1] == 'not_normal')
{
if(in_array($word[$x].$word[$x+1], $isolated_chars))
{
if($al_char[count($al_char)-1] == false)
{
$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];
$char_type[] = 'not_normal';
}
$al_char[] = false;
}
else
{

if($word[strlen($word)-2].$word[strlen($word)-1] == 'ء')
{
if($al_char[count($al_char)-1] == true)
{
$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];
$char_type[] = 'normal';
}
$al_char[] = false;
}
elseif(in_array($word[$x].$word[$x+1], $lam) AND in_array($word[$x+2].$word[$x+3], $alef))
{

$new_word[] = $all_chars[$word[$x+2].$word[$x+3]]['la_end'];
$char_type[] = 'not_normal';
$al_char[] = true;
}
else
{
$new_word[] = $all_chars[$word[$x].$word[$x+1]]['beginning'];
$char_type[] = 'normal';
$al_char[] = false;
}

}

$x += 2;
}
elseif($char_type[count($char_type)-1] == 'normal' AND $al_char[count($al_char)-1] == false)
{

if(in_array($word[$x].$word[$x+1], $isolated_chars))
{
if($al_char[count($al_char)-1] == false)
{
$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];
$char_type[] = 'not_normal';
}
$al_char[] = false;
}
elseif(in_array($word[$x].$word[$x+1], $lam) AND in_array($word[$x+2].$word[$x+3], $alef))
{

$new_word[] = $all_chars[$word[$x+2].$word[$x+3]]['la_end'];
$char_type[] = 'not_normal';
$al_char[] = true;
}
else
{

$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];
$char_type[] = 'normal';
$al_char[] = false;
}

$x += 2;
}


}

if($char_type[count($char_type)-1] == 'not_normal')
{

if(in_array($word[$x].$word[$x+1], $isolated_chars))
{
if($al_char[count($al_char)-1] == false)
{
$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];
}

}
else
{
$new_word[] = $all_chars[$word[$x].$word[$x+1]]['isolated'];

}

}
else
{
if(in_array($word[$x].$word[$x+1], $isolated_chars))
{

$new_word[] = $all_chars[$word[$x].$word[$x+1]]['middle'];

}
else
{

$new_word[] = $all_chars[$word[$x].$word[$x+1]]['end'];

}
}

return implode('',array_reverse($new_word));
}
?>

و يمكن تحميل المثال المصحح من هنا

word2uni.zip

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أحسنت اخي الفاضل ,

ما شاء الله تم التجربة وتأكيد حل المشكلة بشكل جميل وسلس الله يزيدك من علمه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

في الحقيقة لهذا الموضوع شجن وتشعبات، هل قمت بتجربته مع ورود أرقام ضمن النص، أو كلمات إنجليزية في سياق النص العربي، أو حتى التشكيل أو علامات الترقيم، كلها أمور يجب أخذها بعين الاعتبار أيضا.

نحن في مشروع PHP واللغة العربية بادرنا إلى العمل على هذه الإشكالية منذ العام 2006 ونشرنا مكتبة بهذا الخصوص، وهي جزء الآن من مشروع PHP واللغة العربية، ويمكن أن تروا مثالا عنها على هذا الرابط:

http://www.ar-php.org/Glyphs-example-php-arabic.html

لأي معلومات إضافية عن هذه المكتبة أو لتحميلها علما أنها حرة مجانية خاضعة لترخيص LGPL يمكنكم العودة إلى الموقع الرسمي للمكتبة على الشابكة (الإنترنت) والموجود على العنوان التالي:

http://www.ar-php.org

علما أن المكتبة تتضمن العديد من الوظائف الأخرى التي تهم مطوري المواقع العربية، للإطلاع على لائحة ما تتضمنه هذه المكتبة من وظائف وخدمات عليكم بالقائمة التالية:

http://www.ar-php.org/features-php-arabic.html

2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الله عليك :)

بس المشكله هنا انه ممكن اكتب كلمه واحده

طيب لو انا عايز اكتب جمله اعمل اه ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يمكنك حل هذه المشكلة باستخدام هذه الدالة


<?php
function str2word($string)
{
$words = array_reverse(explode(' ', $string));
$result = '';
foreach ($words as $word)
{
$result .= word2uni($word).' ';
}
return $result;
}
?>

ويمكنك استدعاءها بالشكل :


imagettftext($image, 12, 0, 0, 0, $color, $font, str2word('السلام عليكم'));

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا علي الرد السريع

حطيت الفىشن الي ادتهونى و اشتغل

بس في مشكله مش عارف فيين في حرف ال "ك" و "ي"

مثلا انا عيز اكتب

"بك لك فك دك قك كم كل شك

بي لي في دي قي كي كي شي

بس لس فس دس قس شش"

Screen%20Shot%202012-12-26%20at%209.33.24%20PM.png

شكرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

صحيح اخي هنالك مشكلة في كتابة اي كلمة تتكون من حرفين ساعمل بإذن الله على تصحيح هذه المشكلة قريبا :blush:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخي العزيز rawaby88 كما سبق وأن أشرت، ما تبحث عنه موجود ضمن مشروع PHP واللغة العربية، وهنا أمثلة عنه:

http://www.ar-php.org/Glyphs-example-php-arabic.html

وهي مكتبة مجانية تماما ويمكنك الحصول عليها من هنا بالنقر على رابط Download

http://www.ar-php.org/index-php-arabic.html

أما بالنسبة للأخ linux web man عليك التفكير بالحالات التي ترد فيها الأرقام ضمن النص، أو كلمات إنجليزية في سياق النص العربي، أو حتى التشكيل أو علامات الترقيم، كلها أمور يجب أخذها بعين الاعتبار أيضا، يمكنك الإطلاع على الشيفرة المصدرية في الملف Glyphs.php ضمن المكتبة التي أشرت إليها أعلاه، وسأكون سعيدا بأي نصح أو كشف للعلل أو إقتراحات للتطوير.

3

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخي العزيز

لقد قمت بتجربت ال "php-arabic" تحيه عظيمه علي هذا العمل الجبار ولكن وجت "باج" صغيير و هوا

اول حرف في اول الكلمه في اول السطر

مثال

o3.png

o2.png

شكرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخي العزيز

لقد قمت بتجربت ال "php-arabic" تحيه عظيمه علي هذا العمل الجبار ولكن وجت "باج" صغيير و هوا

اول حرف في اول الكلمه في اول السطر

مثال

o3.png

o2.png

شكرا

في حقيقة الأمر لقد تم الإبلاغ عن هذا الخطأ من قبل، وتم حله في مكنز التطوير وسيتم نشر التصويب في الإصدار 3.6 القادم، على كل حال يمكنك الحصول على التصويب مباشرة الآن من خلال استبدال ملف Glyphs.php والموجود ضمن المجلد Arabic بآخر نسخة محدثة منه والتي يمكن الحصول عليها من الرابط التالي (قم بالنقر على الرابط Download this file في أعلى الصفحة وليس نسخ ولصق الكود من نافذة المتصفح):

http://sourceforge.net/p/ar-php/code/32/tree/I18N/Arabic/Glyphs.php

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تم تصحيح بعض المشاكل التي ذكرها الاستاذ خالد و غيره من الاعضاء (كتابة حرف واحد أو حرفين - استخدام جمل بدلاً من كلمات - كتابة الارقام أو الرموز أو الاحرف الانكليزية) , لكن يبقى هناك بعض المشاكل كمشكلة التشكيل و مشكلة كتابة كلمة عربية ملتصقة بكلمة اجنبية ... , وتم دمجها في مكتبة التعامل مع الصور , سأحوال قريبا ً معالجة هذه الاخطاء وغيرها .

يمكن الوصول الى المكتبة عن طريق الموضوع التالي . أو تحميلها مباشرة من هنا

تم تعديل بواسطه Abd Allatif
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمة الله

 

 

جزاك الله أخي الكريم على هذا المجهود العظيم

 

 

جعل الله هذا العمل في موازيين حسناتكم , فقد استفدنا من هذا العمل بصورة كبيرة

 

 

لكن ظهرت هناك مشكلة في حرف "ث" و "ؤ" ,  عند كتابتهم في جملة ولنفرض "أكثر"  يظهر حرف الثاء مرتين " ث أكثر"

 

 

هل بإمكانك حل هذه المشكلة , أو إخبارنا بكيفية حلها

 

 

ولك جزيل الشكر

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لكن ظهرت هناك مشكلة في حرف "ث" و "ؤ" ,  عند كتابتهم في جملة ولنفرض "أكثر"  يظهر حرف الثاء مرتين " ث أكثر"

وعليكم السلام ورحمة الله بركاته

شكراً لك لتبليغك لهذه المشكلة , المشكلة موجودة في السطر 50 من ملف function.image.php حيث انني قمت بالغلط بكتابة الحرف "ص" بدلاً من "ث" ونسيت إضافة الحرف "ؤ"

على كل حال يمكن حل هذه المشكلة باستبدال السطر 50 بالسطر التالي :

 $chars_array = array('ا', 'ب', 'ت', 'ج', 'ح', 'خ', 'د', 'ذ', 'ر', 'ز', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ', 'ف', 'ق', 'ظ', 'ل', 'م', 'ن', 'ه', 'و', 'ي', 'أ', 'إ', 'ى', 'ى', 'ئ', 'ء', 'ة', 'ك','ؤ','ث');

ووجد ايضاً عن طريق التجربة مشكلة في كتابة الحرف "ء" سأعمل على حلها في الإصدار القادم ان شاء الله .

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

وعليكم السلام ورحمة الله بركاته

شكراً لك لتبليغك لهذه المشكلة , المشكلة موجودة في السطر 50 من ملف function.image.php حيث انني قمت بالغلط بكتابة الحرف "ص" بدلاً من "ث" ونسيت إضافة الحرف "ؤ"

على كل حال يمكن حل هذه المشكلة باستبدال السطر 50 بالسطر التالي :

 $chars_array = array('ا', 'ب', 'ت', 'ج', 'ح', 'خ', 'د', 'ذ', 'ر', 'ز', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ', 'ف', 'ق', 'ظ', 'ل', 'م', 'ن', 'ه', 'و', 'ي', 'أ', 'إ', 'ى', 'ى', 'ئ', 'ء', 'ة', 'ك','ؤ','ث');

ووجد ايضاً عن طريق التجربة مشكلة في كتابة الحرف "ء" سأعمل على حلها في الإصدار القادم ان شاء الله .

 

شكرا جزيلا لك 

جعله الله في موازين حسناتك .. 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمته وبركاته

اسف على رفع مشاركه قديمه بعض الشيء ولكني لم اجد حلا اخر,

 

المكتبه ممتازه ولكنها وكما ذكر الاستاذ خالد الشمعة لا تعمل عند تمرير اي شيء غير الحروف العربيه، يعني الارقام و الحروف الانكليزيه تعطلها,

اتمنى اصلاح ذالك لانها ممتازه وصغيره وخفيفه

 

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

المكتبه ممتازه ولكنها وكما ذكر الاستاذ خالد الشمعة لا تعمل عند تمرير اي شيء غير الحروف العربيه، يعني الارقام و الحروف الانكليزيه تعطلها,

اتمنى اصلاح ذالك لانها ممتازه وصغيره وخفيفه

قمت بإضافة هذه الميزة في مكتبة التعامل مع الصور التي يمكن تحميلها عبر الرابط التالي ، طبعًا هناك مشكلة صغيرة في حرفي "ث" و "ؤ" تم حلهم وإصدار ترقيعة بسيطة في التعليق رقم 21

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الكلمات المخرجة ملصقة ببعضها 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .