نوشتن متن روی عکس در php و راست چین کردن آن

این تاپیک 1 پاسخ و 1 مشارکت کننده دارد . آخرین آپدیت توسط :  onlinea ،‏ 1 سال و 1 ماه پیش .

این تاپیک تاکنون 437 بازدید داشته است .

نویسنده پست
دوشنبه ، 12 اکتبر 2015     2:27 ق.ظ #


onlinea

Subscriber
11 پست2 تاپیک

سلام و خسته نباشید

یه راست میرم سر اصل مطلب

با استفاده از کدهای زیر من یه متنی رو از دیتابیس میگیرم و به صورت چاپ شده روی عکس خروجی میگیرم ازش اول مشکل در هم شدن متن فارسی داشتم واسه همین از تابع farsi_correct استفاده کردم واسه این مشکل الان تنها مشکل من این که نمیدونم چطوری قبل اینکه متن بره واسه چاپ شدن روی عکس اونو راست چین کنم

اینو هم بگم کلا چاپ میشه متن فکر نکنید متن روی عکس شناوره نه!

کد فعلی :


// شروع تابع فارسی
function farsi_correct($string)
{
// Reverse the string
$len = mb_strlen($string, 'utf-8');
$result = ''; for ($i = ($len - 1); $i >= 0; $i--)
{
$result .= mb_substr($string, $i, 1, 'utf-8');
}
// These chars work as space when a character comes after them, so the next character will not connect to them
$spaces_after = array('', ' ', 'ا', 'آ', 'أ', 'إ', 'د', 'ذ', 'ر', 'ز', 'ژ', 'و', 'ؤ', '?', '؟', ')', '(', '"', "'", '', '.');
// These chars work as space when a character comes before them, so the previous character will not connect to them
$spaces_before = array('', ' ', '?', '؟', ')', '(', '"', "'", '', '.');
// Persian chars with their different styles at different positions:
// Alone, After a non-space char, Before a non-space char, between two non-space chars
$chars = array();
$chars[] = array('آ', 'ﺂ', 'آ', 'ﺂ');
$chars[] = array('أ', 'ﺄ', 'ﺃ', 'ﺄ');
$chars[] = array('إ', 'ﺈ', 'ﺇ', 'ﺈ');
$chars[] = array('ا', 'ﺎ', 'ا', 'ﺎ');
$chars[] = array('ب', 'ﺐ', 'ﺑ', 'ﺒ');
$chars[] = array('پ', 'ﭗ', 'ﭘ', 'ﭙ');
$chars[] = array('ت', 'ﺖ', 'ﺗ', 'ﺘ');
$chars[] = array('ث', 'ﺚ', 'ﺛ', 'ﺜ');
$chars[] = array('ج', 'ﺞ', 'ﺟ', 'ﺠ');
$chars[] = array('چ', 'ﭻ', 'ﭼ', 'ﭽ');
$chars[] = array('ح', 'ﺢ', 'ﺣ', 'ﺤ');
$chars[] = array('خ', 'ﺦ', 'ﺧ', 'ﺨ');
$chars[] = array('د', 'ﺪ', 'ﺩ', 'ﺪ');
$chars[] = array('ذ', 'ﺬ', 'ﺫ', 'ﺬ');
$chars[] = array('ر', 'ﺮ', 'ﺭ', 'ﺮ');
$chars[] = array('ز', 'ﺰ', 'ﺯ', 'ﺰ');
$chars[] = array('ژ', 'ﮋ', 'ﮊ', 'ﮋ');
$chars[] = array('س', 'ﺲ', 'ﺳ', 'ﺴ');
$chars[] = array('ش', 'ﺶ', 'ﺷ', 'ﺸ');
$chars[] = array('ص', 'ﺺ', 'ﺻ', 'ﺼ');
$chars[] = array('ض', 'ﺾ', 'ﺿ', 'ﻀ');
$chars[] = array('ط', 'ﻂ', 'ﻃ', 'ﻄ');
$chars[] = array('ظ', 'ﻆ', 'ﻇ', 'ﻈ');
$chars[] = array('ع', 'ﻊ', 'ﻋ', 'ﻌ');
$chars[] = array('غ', 'ﻎ', 'ﻏ', 'ﻐ');
$chars[] = array('ف', 'ﻒ', 'ﻓ', 'ﻔ');
$chars[] = array('ق', 'ﻖ', 'ﻗ', 'ﻘ');
$chars[] = array('ک', 'ﻚ', 'ﻛ', 'ﻜ');
$chars[] = array('ك', 'ﻚ', 'ﻛ', 'ﻜ');
$chars[] = array('گ', 'ﮓ', 'ﮔ', 'ﮕ');
$chars[] = array('ل', 'ﻞ', 'ﻟ', 'ﻠ');
$chars[] = array('م', 'ﻢ', 'ﻣ', 'ﻤ');
$chars[] = array('ن', 'ﻦ', 'ﻧ', 'ﻨ');
$chars[] = array('و', 'ﻮ', 'ﻭ', 'ﻮ');
$chars[] = array('ؤ', 'ﺆ', 'ﺅ', 'ﺆ');
$chars[] = array('ی', 'ﯽ', 'ﯾ', 'ﯿ');
$chars[] = array('ي', 'ﻲ', 'ﻳ', 'ﻴ');
$chars[] = array('ئ', 'ﺊ', 'ﺋ', 'ﺌ');
$chars[] = array('ه', 'ﻪ', 'ﮬ', 'ﮭ');
$chars[] = array('ۀ', 'ﮥ', 'ﮬ', 'ﮭ');
$chars[] = array('ة', 'ﺔ', 'ﺗ', 'ﺘ');
$chars[] = array(' ', ' ', ' ', ' ');
$chars[] = array('0', '0', '0', '0');
$chars[] = array('1', '1', '1', '1');
$chars[] = array('2', '2', '2', '2');
$chars[] = array('3', '3', '3', '3');
$chars[] = array('4', '4', '4', '4');
$chars[] = array('5', '5', '5', '5');
$chars[] = array('6', '6', '6', '6');
$chars[] = array('7', '7', '7', '7');
$chars[] = array('8', '8', '8', '8');
$chars[] = array('9', '9', '9', '9');
$chars[] = array('؟', '؟', '؟', '؟');
$chars[] = array('!', '!', '!', '!');
$string = $result;
$len = mb_strlen($string, 'utf-8');
$result = array();
$buffer = array();
for ($i = 0; $i 0 ? mb_substr($string, $i - 1, 1, 'utf-8') : '';
$current_char = mb_substr($string, $i, 1, 'utf-8');
$next_char = $i < ($len - 1) ? mb_substr($string, $i + 1, 1, 'utf-8') : '';
$in_array = false;
foreach ($chars as $char)
{
if (in_array($current_char, $char))
{
$in_array = true;
if (!in_array($next_char, $spaces_after) && !in_array($previous_char, $spaces_before))
{
if ($current_char == ' ')
{
if (!in_farsi_array($chars, $next_char) && !in_farsi_array($chars, $previous_char))
{
$in_array = false;
}
else
{
$result[] = $char[3];
}
}
else
{
$result[] = $char[3];
}
}
elseif (!in_array($previous_char, $spaces_before))
{
$result[] = $char[2];
}
elseif (!in_array($next_char, $spaces_after))
{
$result[] = $char[1];
}
else
{
$result[] = $char[0];
}
continue;
}
}
if (!$in_array)
{
$buffer[] = $current_char;
}
else
{
$lastChar = array_pop($result);
$result = array_merge($result, $buffer);
$result[] = $lastChar;
$buffer = array();
}
$in_array = false;
}
if (count($buffer))
$result = array_merge($result, $buffer);
return implode('', $result);
}
function in_farsi_array(&$farsi, $text)
{
foreach ($farsi as $t)
{
if (in_array($text, $t))
return true;
}
return false;
}
// پایان تابع فارسی

$imgfilename="upload/".$imgfilename; // آدرس عکس
$encoding = mb_detect_encoding( $imgselftext, array(
"UTF-8",
"UTF-32",
"UTF-32BE",
"UTF-32LE",
"UTF-16",
"UTF-16BE",
"UTF-16LE"
), TRUE );
if( $encoding !== "UTF-8" ) {
$imgselftext = iconv('windows-1252', 'utf-8', $imgselftext);
$imgselftext = mb_convert_encoding( $imgselftext, "UTF-8", $encoding );
}

$fontfilename="images/Mitra.ttf"; // فونت استفاده شده
$fontsize=14; // سایز فونت
$distancefromborder=8;
$fontcolorarray=array(0,0,0,0);
$shadecolorarray=array(255,255,255,0);
$stringbottom=20;
if(strpos($imgselftext, "{imgcounter}")!==false)
{
$imgselftext = str_replace("{imgcounter}", $showtotal, $imgselftext);
}
if(strpos($imgselftext, "{todaytotal}")!==false&&strpos($imgselftext, "{todayiptotal}")!==false)
{
$sql="select mycounter,ipcounter from stat_count_day where username='$username' and TO_DAYS(NOW())-TO_DAYS(adddate)=0";
$result=mysql_query($sql);
if($rs=mysql_fetch_assoc($result)){
$todaytotal=$rs['mycounter'];
$todayiptotal=$rs['ipcounter'];
}
else{
$todaytotal=0;
$todayiptotal=0;
}
$imgselftext = str_replace("{todaytotal}", $todaytotal, $imgselftext);
$imgselftext = str_replace("{todayiptotal}", $todayiptotal, $imgselftext);
}
if(strpos($imgselftext, "{yesterdaytotal}")!==false&&strpos($imgselftext, "{yesterdayiptotal}")!==false)
{
$sql="select mycounter,ipcounter from stat_count_day where username='$username' and TO_DAYS(NOW())-TO_DAYS(adddate)=1";
$result=mysql_query($sql);
if($rs=mysql_fetch_assoc($result)){
$yesterdaytotal=$rs['mycounter'];
$yesterdayiptotal=$rs['ipcounter'];
}
else{
$yesterdaytotal=0;
$yesterdayiptotal=0;
}
$imgselftext = str_replace("{yesterdaytotal}", $yesterdaytotal, $imgselftext);
$imgselftext = str_replace("{yesterdayiptotal}", $yesterdayiptotal, $imgselftext);
}
if(strpos($imgselftext, "{ip}")!==false)
{
$imgselftext = str_replace("{ip}", $ip, $imgselftext);
}
$imgselftext = farsi_correct($imgselftext);// استفاده از تابع فارسی برای درهم نشدن حروف فارسی
watermark($imgfilename,$imgselftext,$fontfilename,$fontsize,$distancefromborder,$fontcolorarray,$shadecolorarray,$stringbottom);
}
}

این کدو پیدا کردم واسه راست چین کردن فقط موندم چطوری تو کد بالایی که گذاشتم استفاده کنم خیلی باهاش ور رفتم اخرش نشد


use GDText\Box;
use GDText\Color;

$im = imagecreatefromjpeg("/path/to/base/image.jpg");

$textbox = new Box($im);
$textbox->setFontSize(12);
$textbox->setFontFace("Font.ttf");
$textbox->setFontColor(new Color(0, 0, 0)); // black
$textbox->setBox(
50, // distance from left edge
50, // distance from top edge
200, // textbox width
100 // textbox height
);

// text will be aligned inside textbox to right horizontally and to top vertically
$textbox->setTextAlign('right', 'top');

$textbox->draw("Username");

2  تشکر
دوشنبه ، 12 اکتبر 2015     6:15 ق.ظ #


onlinea

Subscriber
11 پست2 تاپیک

از دوستان کسی نیست؟

0  تشکر
پست 1 تا 2 (از مجموع 2 پست)

برای پاسخ دادن به این تاپیک باید وارد سایت شوید .