برنامه نویسی

آموزش تبدیل متن به عکس با PHP

آموزش ساخت تصویر و تبدیل متن به عکس با PHP

تبدیل متن به عکس با PHP امکان پذیر است، در این مقاله روش تبدیل متن تکست به عکس را به کمک کد نویسی با PHP به شما عزیزان آموزش خواهیم داد، همراه داتیس نتورک باشید.

آموزش ساخت تصویر و تبدیل متن به عکس با PHP

تبدیل متن به عکس با PHP

گاهی نیاز داریم یک متن مشخص را به عکس تبدیل کنیم، اینکار ممکن است دلایل مختلفی داشته باشد.

مثلا همه ما با تصاویر CAPTCHA آشنا هستیم که باید حروف داخل تصویر را در کادری وارد می کردیم تا امکان ورود میسر می شد.

در این گونه موارد لازم است ما یک متن را به تصویر تبدیل کنیم، این کار با کمک کدنویسی PHP امکان پذیر است.

برای اینکار از یک کلاس PHP برای ساخت عکس و اضافه کردن خطوط مختلف به تصویر استفاده می کنیم.

کتابخانه GD برای ساخت و دستکاری فایل های عکس در php مورد استفاده قرار میگیرد .

پس قبل از هرکاری مطمین باشید که PHP GD بر روی سرور شما نصب شده باشد.

کلاس TextToImage

کلاس TextToImage در php به ما این امکان را می دهد که یک عکس را بسازیم و متن دلخواه را به آن اضافه کنیم.

کلاس TextToImage دارای 4 تابع است که در زیر توضیح داده شده است:

  • createImage() : ساخت عکس از روی متن . رشته متن باید به عنوان ورودی به تابع داده شود . همچنین میتوانید اندازه فونت و ابعاد (طول و عرض ) را مشخص کنید
  • saveAsJpg() : عکس را در فرمت .jpg ذخیره میکند . می توانید اسم فایل و محل ذخیره سازی را مشخص کنید .
  • saveAsPng() : عکس را در فرمت .png ذخیره میکند . می توانید اسم فایل و محل ذخیره سازی را مشخص کنید .
  • showImage() : عکس ساخته شده توسط تابع createImage() را return میکند.
<?php
/**
* TextToImage class
* This class converts text to image
* 
* @author Datisnetwork Dev Team
* @link https://www.datisnetwork.com
*/
class TextToImage {
private $img;

/**
* Create image from text
* @param string text to convert into image
* @param int font size of text
* @param int width of the image
* @param int height of the image
*/
function createImage($text, $fontSize = 20, $imgWidth = 400, $imgHeight = 80){

//text font path
$font = 'fonts/B_Yekaan.ttf';

//create the image
$this->img = imagecreatetruecolor($imgWidth, $imgHeight);

//create some colors
$white = imagecolorallocate($this->img, 255, 255, 255);
$grey = imagecolorallocate($this->img, 128, 128, 128);
$black = imagecolorallocate($this->img, 0, 0, 0);
imagefilledrectangle($this->img, 0, 0, $imgWidth - 1, $imgHeight - 1, $white);

//break lines
$splitText = explode ( "\\n" , $text );
$lines = count($splitText);

foreach($splitText as $txt){
$textBox = imagettfbbox($fontSize,$angle,$font,$txt);
$textWidth = abs(max($textBox[2], $textBox[4]));
$textHeight = abs(max($textBox[5], $textBox[7]));
$x = (imagesx($this->img) - $textWidth)/2;
$y = ((imagesy($this->img) + $textHeight)/2)-($lines-2)*$textHeight;
$lines = $lines-1;

//add some shadow to the text
imagettftext($this->img, $fontSize, $angle, $x, $y, $grey, $font, $txt);

//add the text
imagettftext($this->img, $fontSize, $angle, $x, $y, $black, $font, $txt);
}
return true;
}

/**
* Display image
*/
function showImage(){
header('Content-Type: image/png');
return imagepng($this->img);
}

/**
* Save image as png format
* @param string file name to save
* @param string location to save image file
*/
function saveAsPng($fileName = 'text-image', $location = ''){
$fileName = $fileName.".png";
$fileName = !empty($location)?$location.$fileName:$fileName;
return imagepng($this->img, $fileName);
}

/**
* Save image as jpg format
* @param string file name to save
* @param string location to save image file
*/
function saveAsJpg($fileName = 'text-image', $location = ''){
$fileName = $fileName.".jpg";
$fileName = !empty($location)?$location.$fileName:$fileName;
return imagejpeg($this->img, $fileName);
}
}

تبدیل متن به عکس در php

فایل TextToImage.php (کلاس TextToImage) را اینکلود و یک آبجکت (نمونه) از آن را می سازیم .

تابع createImage() را فراخوانی و رشته متنی را به تابع پاس میدیم.

اگر قصد اضافه کردن چنید خط را داشتید ، قبل از خط جدید “\n” را اضافه کنید.

//include TextToImage class
require_once 'TextToImage.php';

//create img object
$img = new TextToImage;

//create image from text
$text = 'Welcome to Datisnetwork.\nThe World of Programming.';
$img->createImage($text);

برای نمایش عکس از تابع showImage() استفاده میکنیم:

//display image
$img->showImage();

برای ذخیره سازی عکس در فرمت های Png یا JPG از تابع saveAsPng() یا SaveAsJpg() استفاده میکنیم .

اگر نام فایل خروجی و مکان ذخیره سازی را مشخص نکنید ، عکس با اسم همان دایرکتری که اسکریپت را اجرا کردید ذخیره خواهد شد.

//save image as png format
$img->saveAsPng('netparadis-text-to-image','images/');

//save image as jpg format
$img->saveAsJpg('netparadis-text-to-image','images/');

تبدیل متن فارسی به عکس در php

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

ولی در تبدیل متن فارسی به عکس در php با کد های بالا به مشکلاتی مثل برعکس شدن حروف ، جدا نوشته شدن و مشکلات دیگر بر میخورید که مشکل اصلی به خاطر دیتاهای unicode است .

برای حل مشکل یک روش جایگزین دیگر برای تبدیل متن فارسی به عکس در php معرفی کردیم :

ساختار فایل های پروژه تبدیل متن فارسی به عکس در php

  • /fonts
  • bidi.php
  • persian_txt2pic.php
  • unicode_data.php
  • index.php

ابتدا روی لینک زیر کلیک کنید و پروژه را دانلود کنید:

لینک دانلود

بعد از اکسترکت کردن ، فایل index.php را اجرا و متن خود را وارد و خروجی عکس را تحویل بگیرید

برای تغییر اندازه عکس ، فونت ها ، رنگ پس زمینه و رنگ متن فایل index.php را ویرایش کنید.

<?php

require_once('persian_txt2pic.php');

if(!isset($_GET['submit'])){
echo '<html dir="rtl">
<head><title>Persian_log2vis Example</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head><body>
<form method="get">
<textarea name="text">تیم برنامه نویسی نت پارادیس</textarea>
<input type="submit" name="submit" value="submit"> 
</body></html>';
}else{
$text = $_GET['text'];
persian_log2vis($text);

// Create the image
$im = imagecreatetruecolor(400, 200);

// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, , , );

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

// Add the text
@imagettftext($im, 20, , 10, 30, $white, $font, $text);

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

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
}
?>

خب همانطور که متوجه شدید direction حروف به صورت left to Right یعنی راست به چپ است .

برای حل این مشکل از تابع imagettfbbox برای دریافت عرض متن استفاده می کنیم و بعد آن را از عرض خود عکس کم می کنیم تا مقدار مابه التفاوت را به عنوان فاصله متن از سمت چپ در نظر گرفتیم که باعث شد متن فارسی ما از سمت راست شروع شود.

کد اصلاحی راستچین کردن تبدیل متن فارسی به عکس در php

<?php

require_once('persian_txt2pic.php');

if(!isset($_GET['submit'])){
echo '<html dir="rtl">
<head><title>Persian_log2vis Example</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head><body>
<form method="get">
<textarea name="text">تیم برنامه نویسی نت پارادیس</textarea>
<input type="submit" name="submit" value="submit"> 
</body></html>';
}else{
$text = $_GET['text'];
persian_log2vis($text);

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

// Create the image
$im = imagecreatetruecolor(400, 200);

// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, , , );

$dimensions = imagettfbbox(20, @$angle, $font, $text);
$textWidth = abs($dimensions[4] - $dimensions[]);
$imgWidth = imagesx($im) - $textWidth;

// Add the text
@imagettftext($im, 20, , $imgWidth-20, 30, $white, $font, $text);

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

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
}
?>

برای نوشتن متن به صورت چند خطی از تابع wordwrap به اینصورت بعد از دریافت متن و ذخیره آن در یک متغییر به اینصورت استفاده کنید.

}else{
$text = $_GET['text'];
$text = wordwrap($text, 45, "\n");
....

عدد ۴۵ به این معنی است که هر خط شامل چند حرف یا کاراکتر باشد .

جمع بندی تبدیل متن به عکس با PHP

کلاس TextToImage به طور پیش فرض از فونت b Yekaan برای متن استفاده می کند.

اگر خواستید فونت پیش فرض را تغییر بدید کافیست فونت مورد نظر را در دایرکتری fonts/ قرار بدید و آدرس را به تابع createImage($font) پاس بدید.

امیدواریم مقاله آموزش تبدیل متن به عکس با PHP برای شما عزیزان مفید بوده باشد.

داتیس نتورک را در شبکه های اجتماعی دنبال کنید.

مطالب مرتبط

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *