ورود به سايتعضويت جستجوی اسکریپت جستجوی مقاله اخبارسوالات اوليه تبلیغاتتماس با ما
تبلیغات متنی
اخبار سایت
کتاب فارسی آموزش PHP
معرفی کتاب آموزشی asp.net وAjax و مقالات آموزشی
اعمال قانون کپی رایت نوشته، با کد مولف
دعوت به همکاری
افتتاح سایت هات اسکریپت
نظرسنجی
آیا مایل به فروش محصولات نرم افزاری خود در هات اسکریپت هستید؟
[ ۱۰۷ راي ]
[ ۹ راي ]
[ ۳۴ راي ]



لیست نظرسنجی ها
آمارسایت
تاریخ
بازدید
۱۳۸۹ / ۶ / ۱۷
۲۰۸
۱۳۸۹ / ۶ / ۱۶
۶۲۴
۱۳۸۹ / ۶ / ۱۵
۹۹۸
۱۳۸۹ / ۶ / ۱۴
۴۸۷
۱۳۸۹ / ۶ / ۱۳
۶۲۲
۱۳۸۹ / ۶ / ۱۲
۸۴۵
۱۳۸۹ / ۶ / ۱۱
۳۹۷
تبلیغات
شیک و پیک
جدیدترین مد لباسهای زنانه در شیک و پیک.آخرین مد لباسهای مجلسی ویژه بانوان در شیک و پیک.با شیک و پیک همیشه شیک و پیک باشید.
XDic.ir

آموزشگاه آنلاین زبان انگلیسی XDic.ir ! آزمونهای آنلاین و روزانه.دیکشنری آنلاین .ایکس دیک، آموزشگاه همراه شما.عضویت رایگان!

رسانه امنیت دیجیتال
آستالاویستا رسانه امنیت دیجیتال.آخرین اخبار امنیت و شبکه را در آستالاویستا بخوانید.
نوشتن بر روی تصویر توسط PHP
مدير سايت || نظرات || ۱۱ / ۵ / ۱۳۸۸ || p2049

یکی از دوستان کد ساده ای را به زبان PHP خواستند که توسط آن، جمله ای بر روی عکس نوشته شود؛ به همین خاطر چون فکر کردم جنبه کاربردی زیادی دارد، یک کلاس کامل برای این منظور نوشتم که امیدوارم مورد استفاده قرار بگیرد. از جمله قابلیت های این کلاس، تراز کردن موقعیت قرارگیری متن بر روی تصویر، درج حاشیه (Border)، تعیین شفافیت (Opacity) نوشته و پشتیبانی از انواع فورمت های ورودی و خروجی می باشد.

در ادمه سورس کد این کلاس را بررسی میکنیم.

 

متن کلاس بدین صورت است: (نام فایل write_on_pic.class.php)

 


/**
* This class is a writer on picture
*
* @package Write on picture
* @author Nabi KaramAliZadeh
* @copyright 2008 (c) Nabi.ir
* @license http://www.gnu.org/copyleft/gpl.html
* @version 1.0.0
* @link http://weblog.nabi.ir/post-27.html [documentation in persian]
* @since 12 April 2008
*/

class Write_On_Pic
{
var $inputImage = ''; // input file name
var $inputType = 'jpg'; // input file format: JPG, PNG, GIF, BMP
var $outputImage = ''; // output file name
var $outputType = 'png'; // output file format: JPG, PNG, GIF, BMP
var $text = ''; // text to write on image
var $fontSize = 5; // text size: 1,2,3,4,5
var $textColor = array(255, 255, 255); // text color: RGB decimal
var $borderFlag = true; // flag of border: TRUE, FALSE
var $borderColor = array(0, 0, 0); // border color: RGB decimal
var $backFlag = false; // flag of background: TRUE, FALSE
var $backColor = array(200, 200, 200); // background color: RGB decimal
var $marginH = 0; // text horizonatal margin in pixels
var $marginV = 0; // text vertical margin in pixels
var $alignH = 'LEFT'; // text horizonatal position, LEFT | CENTER | RIGHT
var $alignV = 'TOP'; // text vertical position, TOP | CENTER | BOTTOM
var $quality = 85; // quality out file, only for JPG format
var $opacity = 60; // text opacity: 0-100
var $show = true; // show image: TRUE, FALSE
var $save = false; // save out file: TRUE, FALSE
var $error = null; // return error message

function Action()
{
// Set function to create image
if (!$this->inputImage)
{
$this->error = 'Not found input file.';
return false;
}

switch (strtolower($this->inputType))
{
case "png":
$createFunc = "imagecreatefrompng";
break;
case "gif";
$createFunc = "imagecreatefromgif";
break;
case "bmp";
$createFunc = "imagecreatefrombmp";
break;
case "jpeg":
case "jpg":
$createFunc = "imagecreatefromjpeg";
break;
}

// Create image
$im = @$createFunc($this->inputImage);

if (!$im)
{
$this->error = 'Invalid format file.';
return false;
}

// Create box
$this->fontSize = intval($this->fontSize);
if ($this->fontSize < 1) $this->fontSize = 1;
if ($this->fontSize > 5) $this->fontSize = 5;
$width = strlen($this->text) * ($this->fontSize 4);
$height = $this->fontSize 12;

$overlay_img = imagecreatetruecolor($width 2, $height 2);

if ($this->backFlag)
{
$bgColor = imagecolorallocate($overlay_img, $this->backColor[0], $this->backColor[1], $this->backColor[2]);
}
else
{
$bgColor = imagecolortransparent($overlay_img);
}

imagefill($overlay_img ,0 ,0 ,$bgColor);

// Insert border
if ($this->borderFlag)
{
$color = imagecolorallocate($overlay_img, $this->borderColor[0], $this->borderColor[1], $this->borderColor[2]);
imagestring($overlay_img, $this->fontSize, 0, 0, $this->text, $color);
imagestring($overlay_img, $this->fontSize, 2, 2, $this->text, $color);
imagestring($overlay_img, $this->fontSize, 2, 0, $this->text, $color);
imagestring($overlay_img, $this->fontSize, 0, 2, $this->text, $color);
}

// Insert text
$color = imagecolorallocate($overlay_img, $this->textColor[0], $this->textColor[1], $this->textColor[2]);
imagestring($overlay_img, $this->fontSize, 1, 1, $this->text, $color);

// Get width and height box
$overlay_w = ImageSX($overlay_img);
$overlay_h = ImageSY($overlay_img);

// Get width and height image
$im_w = ImageSX($im);
$im_h = ImageSY($im);

// Set X text
switch (strtoupper($this->alignH))
{
case 'CENTER':
$x = ($im_w - $overlay_w) / 2;
break;
case 'RIGHT':
$x = $im_w - $overlay_w - $this->marginH;
break;
case 'LEFT':
$x = 0 $this->marginH;
break;
}

// Set Y text
switch (strtoupper($this->alignV))
{
case 'CENTER':
$y = ($im_h - $overlay_h) / 2;
break;
case 'BOTTOM':
$y = $im_h - $overlay_h - $this->marginV;
break;
case 'TOP':
$y = 0 $this->marginV;
break;
}

// Merge text box with image
imagecopymerge($im, $overlay_img, $x, $y, 0, 0, $overlay_w, $overlay_h, $this->opacity);

// Destroy text box
imagedestroy($overlay_img);

// Save to disk
if ($this->save)
{
if (!$this->outputImage)
{
$this->error = 'Not found output file.';
return false;
}

switch (strtolower($this->outputType))
{
case "png":
imagepng($im, $this->outputImage);
break;
case "gif";
imagegif($im, $this->outputImage);
break;
case "bmp";
imagewbmp($im, $this->outputImage);
break;
case "jpeg":
case "jpg":
imagejpeg($im, $this->outputImage, $this->quality);
break;
}
}

// Show the image
if ($this->show)
{
switch ($this->outputType)
{
case "png":
header("Content-type: image/png");
imagepng($im);
break;
case "gif";
header("Content-type: image/gif");
imagegif($im);
break;
case "bmp";
header("Content-type: image/bmp");
imagewbmp($im);
break;
case "jpeg":
case "jpg":
header("Content-type: image/jpeg");
imagejpeg($im, null, $this->quality);
break;
}
}

// Destroy image
imagedestroy($im);
return true;
}
}
?>
 

 

و این هم یک مثال: (نام فایل example.php)


/**
* This example is for writer on picture class
*
* @name Example write on picture
* @author Nabi KaramAliZadeh
* @copyright 2008 (c) Nabi.ir
* @license http://www.gnu.org/copyleft/gpl.html
* @version 1.0.0
* @link http://weblog.nabi.ir/post-27.html [documentation in persian]
* @since 12 April 2008
*/

 
require_once ('write_on_pic.class.php');
 
$objWriter = new Write_On_Pic();
 
$objWriter->inputImage = 'aquarius.jpeg';
$objWriter->inputType = 'jpg';
$objWriter->outputImage = 'aquarius2.png';
$objWriter->outputType = 'png';
$objWriter->text = 'http://weblog.nabi.ir/';
$objWriter->fontSize = 5;
$objWriter->textColor = array(255, 255, 255);
$objWriter->borderFlag = true;
$objWriter->borderColor = array(0, 0, 0);
$objWriter->backFlag = true;
$objWriter->backColor = array(255, 0, 0);
$objWriter->marginH = 0;
$objWriter->marginV = 170;
$objWriter->alignH = 'CENTER';
$objWriter->alignV = 'BOTTOM';
$objWriter->quality = 90;
$objWriter->opacity = 50;
$objWriter->show = true;
$objWriter->save = true;
 
$return = $objWriter->Action();
 
if (!$return)
{
echo $objWriter->error;
}
 
?>

فکر میکنم همه چیز واضح باشد با این حال توضیح مختصری عرض میکنم.

پس از الحاق فایل کلاس به صفحه، ابتدا یک شیء از کلاس Write_On_Pic با نام objWriter$ ایجاد میکنیم.

پارامترهایی که باید به این شیء نسبت دهیم بدین صورت می باشند:

  • inputImage : نام و مسیر تصویر ورودی
  • inputType : فورمت تصویر ورودی، که میتواند BMP, GIF, PNG, JPG باشد
  • outputImage : نام و مسیر تصویر خروجی
  • outputType : فورمت تصویر خروجی، که میتواند BMP, GIF, PNG, JPG باشد
  • text : متنی که قصد دارید بر روی تصویر درج شود
  • fontSize : اندازه فونت، عددی بین 1 تا 5
  • textColor : رنگ فونت، یک آرایه که به ترتیب حاوی مقادیر سه رنگ اصلی قرمز، سبز، آبی در مبنای 10می باشد. عددی بین 1 تا 255
  • borderFlag : مشخص کننده وجود یا عدم وجود حاشیه برای نوشته می باشد. TRUE یا FALSE
  • borderColor : رنگ حاشیه، یک آرایه که به ترتیب حاوی مقادیر سه رنگ اصلی قرمز، سبز، آبی در مبنای 10می باشد. عددی بین 1 تا 255
  • backFlag : مشخص کننده وجود یا عدم وجود زمینه برای نوشته می باشد. TRUE یا FALSE
  • backColor : رنگ زمینه، یک آرایه که به ترتیب حاوی مقادیر سه رنگ اصلی قرمز، سبز، آبی در مبنای 10می باشد. عددی بین 1 تا 255
  • marginH : حاشیه از لبه در محور افقی
  • marginV : حاشیه از لبه در محور عمودی
  • alignH : تراز کردن نوشته در راستای افق، یکی از مقادیر LEFT، CENTER، RIGHT
  • alignV : تراز کردن نوشته در راستای عمود، یکی از مقادیر TOP، CENTER، BOTTOM
  • quality : کیفیت تصویر خروجی که عددی بین 1 تا 100 است
  • opacity : شفافیت نوشته روی تصویر خروجی، که عددی بین 1 تا 100 است
  • show : با TRUE قرار دادن این پارامتر، تصویر در خروجی به نمایش در خواهد آمد
  • save : با TRUE قرار دادن این پارامتر، تصویر تولیدی در قالب فایل جدیدی ذخیره می شود

پارامترهایی که مقدار دهی نشوند از مقدار پیشفرض آنها استفاده خواهد شد. نهایتاً پس از انتساب تمامی مقادیر، توسط متد ()Action عملیات آغاز میگردد و در انتها نیز کنترل خطا صورت میگیرد.

چند نکته:

  • gd2 باید نصب و فعال باشد.
  • برای نوشته ها یک حاشیه در نظر گرفته شده است، این حاشیه به نمایان بودن متن بر روی زمینه با هر رنگی کمک میکند. مثلاً نوشته سفید با حاشیه مشکلی، باعث میشود که نوشته هم بر روی زمینه سفید و هم روی زمینه مشکلی به خوبی مشاهده شود.
  • مصرف زیاد این کد در گالری های تصاویر است که بایستی کپی رایت سایت به صورت خودکار بر روی تصویر درج گردد. بهتر است از شفافیت مناسب برای نوشته بر روی تصویر استفاده کنید.

نمونه هایی از خروجی توسط این کلاس:

 

 

downloadدریافت سورس و مثالهای این کلاس

ارایه کننده: نبي کرمعلي زاده

 

       

کلیه حقوق و امتیازات این سایت متعلق به گروه پاسارگاد (گروه سایتهای هات هاست) می باشد.
::گروه پاسارگاد::هات اسکریپت::آستالاویستا::هات کلیک::آی پی 2 لوکیشن::ایکس دیک::هات هاست::

Powered by HAM3D.net