• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
تبدیل متن به عکس
#1
سلام خدمت همه دوستان
یک فایل text دارم که در اون در هر خط یک جمله به فارسی نوشته حالا می خوام کدی بنویسم که بیاد از این فایل متنی خط به خط جمله ها را بخونه و هر جمله را به یک عکس با فونت دلخواه من تبدیل و اون را در محل مناسب ذخیره کنه.
البته بعد از جستجو در وب دیدم یک دوستی زحمت کشیدند و کدی نوشتند که متن را به عکس تبدیل می کنه اما مشکل من اینه که نمی خوام متن را دستی بهش بدم می خوام از فایل متنی خودش بخونه و تبدیل و ذخیره کنه. احتمالا با نوشتن یک حلقه مشکل برطرف میشه اما خوب بلد نبودم .
از دوستان و اساتید محترم خواهش می کنم کمک کنند تا این مسئله حل بشه.
نمونه کدها و نمونه فایل متنی را آپلود می کنم.
سپاس


فایل‌های پیوست
.zip   Persian-txt2img-netparadis.zip (اندازه 381.17 KB / تعداد دانلود: 6)
.txt   text.txt (اندازه 372 بایت / تعداد دانلود: 3)
  پاسخ
تشکر شده توسط :
#2
با سلام

فایل index رو میتونین به این صورت اصلاح کنین

کد پی‌اچ‌پی:
<?php

require_once('persian_txt2pic.php');



$file fopen('filename.txt','r');
$arr = array();
while(! 
feof($file))
{
    
$arr[] =  fgets($file);
}

fclose($file);


for(
$i=0;$i<count($arr);$i++){
    

    
$text $arr[$i];


    
persian_log2vis($text);

    
    
// Create the image
    
$im imagecreatetruecolor(400200);

    
// Create some colors
    
$white imagecolorallocate($im255255255);
    
$black imagecolorallocate($im000);

    
// Replace path by your own font path
    
$font 'fonts/DejaVuSans.ttf';

    
    
// Add the text
        
@imagettftext($im2001030$white$font$text);

    
// Set the content-typezz
    
header("Content-type: image/png");

    
// save image in path
    
$save ""strtolower(rand(0,9999)) .".png";
    
imagepng($im$save);
}





?>
با تشکر ممل آمریکایی
  پاسخ
تشکر شده توسط : ayoubsys sara147
#3
(۱۳۹۶ آذر ۰۵, ۱۱:۲۱ ب.ظ)ahora نوشته: با سلام

فایل index رو میتونین به این صورت اصلاح کنین

کد پی‌اچ‌پی:
<?php

require_once('persian_txt2pic.php');



$file fopen('filename.txt','r');
$arr = array();
while(! 
feof($file))
{
    
$arr[] =  fgets($file);
}

fclose($file);


for(
$i=0;$i<count($arr);$i++){
    

    
$text $arr[$i];


    
persian_log2vis($text);

    
    
// Create the image
    
$im imagecreatetruecolor(400200);

    
// Create some colors
    
$white imagecolorallocate($im255255255);
    
$black imagecolorallocate($im000);

    
// Replace path by your own font path
    
$font 'fonts/DejaVuSans.ttf';

    
    
// Add the text
        
@imagettftext($im2001030$white$font$text);

    
// Set the content-typezz
    
header("Content-type: image/png");

    
// save image in path
    
$save ""strtolower(rand(0,9999)) .".png";
    
imagepng($im$save);
}





?>

واقعا از شما متشکرم.کار فوق العاده ای کردید. درست کار کرد فقط یک موضوع دیگه این بر چه اساسی میاد خط ها را میخونه ؟ مثلا میشه گفت هرجا علامت+ دیدی بدون که جمله بعدی هست ؟
فقط اگر میشه میخوام اسم فایل ها رندوم نباشه مثلا از 1 شروع بشه و دقیقا خط بعدی بشه 2 و بعدی 3 و همینطور یکی یکی اضافه بشه

دو تا سوال دیگه هم داشتم
الان عکس هایی که میسازه زمینه مشکی داره و رنگ فونت سفید چطور میشه زمینه سفید باشه و رنگ فونت سیاه ؟ هرکاری کردم نشد زمینه را عوض کنم.
سوال دوم اینکه راهی هست نوشته داخل عکس راست چین بشه ؟ چون فارسی متاسفانه توی عکس ها میافته سمت چپ
  پاسخ
تشکر شده توسط :
#4
این کد تمام سوالات شما رو پاسخ داده ...
توضیحات در داخل کد به صورت کامنت گذاشتم

کد پی‌اچ‌پی:
<?php

require_once('persian_txt2pic.php');



$file fopen('filename.txt','r');
$arr = array();
while(! 
feof($file))
{
    
$arr[] =  fgets($file);
}

fclose($file);


for(
$i=0;$i<count($arr);$i++){

// جستجوی + و شناسایی خطی که باید عکس شود
    
if (strpos($arr[$i] , '+') !== false) {



    
$text $arr[$i];

//حذف کاراکتر+ از متن
    
$text str_replace("+","",$text);

    
// <... Do your work with the line ...>

    
persian_log2vis($text);

    
    
// Create the image
    
$im imagecreatetruecolor(400200);

    
// Create some colors
    
$white imagecolorallocate($im255255255);
/// تعیین رنگ پس زمینه
    
$black imagecolorallocate($im100149237);

    
// Replace path by your own font path
    
$font 'fonts/DejaVuSans.ttf';

/// راست چین کردن متن
    
$dimensions imagettfbbox(20, @$angle$font$text);
    
$textWidth abs($dimensions[4] - $dimensions[0]);
    
$imgWidth imagesx($im) - $textWidth;
    
    

        @
imagettftext($im200$imgWidth-2030$white$font$text);

/// ست کردن رنگ پس زمینه
        
imagefill($im00$black);




    
// Set the content-typezz
    
header("Content-type: image/png");

// شماره گذاری بر اساس تعداد عکس های داخل پوشه مورد نظر شما به صورت ترتیبی
    
$imagecount count(glob("*.png"));
    
    
$save ""strtolower($imagecount+1) .".png";
    
imagepng($im$save);
        
        }
}


?>

کد رنگ برای پس زمینه یا رنگ متن بر اساس فرمت RGB
http://simplysally.com/GD/RBG4PHP.html
با تشکر ممل آمریکایی
  پاسخ
تشکر شده توسط : mdchicho
#5
(۱۳۹۶ آذر ۰۹, ۰۱:۴۹ ق.ظ)ahora نوشته: این کد تمام سوالات شما رو پاسخ داده ...
توضیحات در داخل کد به صورت کامنت گذاشتم

کد رنگ برای پس زمینه یا رنگ متن بر اساس فرمت RGB
http://simplysally.com/GD/RBG4PHP.html

خیلی از شما سپاسگزارم . فوق العاده بود.

جسارتا یک سوال دیگه دارم چطور میشه مثلا از فایل متنی یک خط را بخونه و محتوای اون را داخل متغیر بریزه ؟ مثلا محتوای خط 4 را بریزه تو متغیر ؟
قول میدم این آخرین سوال باشه خخخخخ
  پاسخ
تشکر شده توسط :
#6
این هم اصلاحی که خواستین
توضیح داخل کد ها

کد پی‌اچ‌پی:
<?php

require_once('persian_txt2pic.php');



$file fopen('filename.txt','r');
$arr = array();
while(! 
feof($file))
{
    
$arr[] =  fgets($file);
}

fclose($file);

//آغار شمارشگر جهت تشخیص جمله چندم 
$line 

for(
$i=0;$i<count($arr);$i++){


// جستجوی + و شناسایی خطی که باید عکس شود
    
if (strpos($arr[$i] , '+') !== false) {

    


    
$text $arr[$i];

//حذف کاراکتر+ از متن
    
$text str_replace("+","",$text);

//شرط جهت اینکه اگر خط مثلا دوم بود متن اون خط رو داخل متغیر مورد نظر قرار بده 
    
if($line==2){
        
$SAVE_VERB $text ;
    }

    
// <... Do your work with the line ...>

    
persian_log2vis($text);

    
    
// Create the image
    
$im imagecreatetruecolor(400200);

    
// Create some colors
    
$white imagecolorallocate($im255255255);
/// تعیین رنگ پس زمینه
    
$black imagecolorallocate($im100149237);

    
// Replace path by your own font path
    
$font 'fonts/DejaVuSans.ttf';

/// راست چین کردن متن
    
$dimensions imagettfbbox(20, @$angle$font$text);
    
$textWidth abs($dimensions[4] - $dimensions[0]);
    
$imgWidth imagesx($im) - $textWidth;
    
    

        @
imagettftext($im200$imgWidth-2030$white$font$text);

/// ست کردن رنگ پس زمینه
        
imagefill($im00$black);




    
// Set the content-typezz
    
header("Content-type: image/png");

// شماره گذاری بر اساس تعداد عکس های داخل پوشه مورد نظر شما به صورت ترتیبی
    
$imagecount count(glob("*.png"));
    
    
$save ""strtolower($imagecount+1) .".png";
    
imagepng($im$save);
$line++;
        
        }
}


?>
با تشکر ممل آمریکایی
  پاسخ
تشکر شده توسط : mdchicho
#7
جناب اهورا عزیز خیلی ممنون از پاسخگویی شما ، میدونم که قول دادم دیگه سوال نپرسم و واقعا خیلی تلاش کردم خودم انجامش بدم ولی چند روز خیلی درگیرم کرده لطفا به کدهای زیر نگاه کنید.
کد پی‌اچ‌پی:
$file fopen('en.txt','r');
$arr = array();
while(! 
feof($file))
{
    
$arr[] =  fgets($file);
}

fclose($file);
    
$one 2;
    
$tow 3;

for(
$i=1;$i<count($arr);$i++){
    
    
$text $arr[$i];

$top_file $one.'.jpg';
$bottom_file $tow.'.jpg';

$top imagecreatefromjpeg($top_file);
$bottom imagecreatefromjpeg($bottom_file);

// show images
echo "<img src=\"".$top_file."\">";
//echo "<br /><br />";
echo "<img src=\"".$bottom_file."\">";

// get current width/height
list($top_width$top_height) = getimagesize($top_file);
list(
$bottom_width$bottom_height) = getimagesize($bottom_file);

// compute new width/height
$new_width = ($top_width $bottom_width) ? $top_width $bottom_width;
$new_height $top_height $bottom_height;

// create new image and merge
$new imagecreatetruecolor($new_width$new_height);
imagecopy($new$top0000$top_width$top_height);
imagecopy($new$bottom0$top_height00$bottom_width$bottom_height);

// save to file
$new_name$text.".jpg";
imagejpeg($new$new_name);

// show image
//echo "<br /><br />";
//echo "<img src=\"".$new_name."\">";

// free the memory
imagedestroy($top);
imagedestroy($bottom);
imagedestroy($new);
$one $one+2;
$tow $tow+2;

در یک پوشه حدود 1000 تا عکس دارم که از نام 2.jpg شروع میشه تا 1001.jpg می خواستم 2 تا 2 تا این عکس ها را با هم مرج کنم و تبدیل به یک عکس کنم مثلا عکس شماره 2و3 بشه یک عکس و با نامی که در خط 1 یک فایل متنی دارم ذخیره بشه و همین طور توی حلقه به ترتیب این کار انجام بشه مثلا بعدی میشه عکس 4 و 5 و نام عکس جدید که ذخیره میشه باید از خط شماره 2 فایل متنی خونده بشه.
امیدوارم منظورم را درست رسونده باشم.
کدهایی که گذاشتم حاصل تلاش این چند روزه هست ولی متاسفانه هرکاری کردم نشد که نشد.
ممنون می شوم دوستان راهنمایی کنند
  پاسخ
تشکر شده توسط :
#8
شما باید مرتبتر کد بنویسید
اول اینکه یه فانکشن جهت ذخیره اطلاعات بنویسید
سپس یک فانکیشن جهت مرج کردن دو عکس
سپس یک فانکشن جهت خوندن لیست عکسها
بعد در یک حلقه for از فانکشن هاتون استفاده بکنید .
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان