برگزیده های پرشین تولز

آموزش پی اچ پی - قسمت ششم - جی دی

carp3

کاربر تازه وارد
تاریخ عضویت
15 آپریل 2005
نوشته‌ها
1,318
لایک‌ها
1
سن
94
سلام !
20.gif

بعد از يک ماه تاخير بالاخره قسمت شيشومشو هم نوشتم !
8.gif

تو اين قسمت ميخواه در باره جي دي صحبت کنم و راه استفاده از اونو بگم ...
18.gif

اول يه مقدار مقدمه !
57.gif


پي چ پي فقط به دادن خروجي متن محدود نيست شما ميتونيد عکس هاي متعددي با فرمت هاي متنوع با پي اچ پي خروجي داشته باشيد مثل PNG , GIF , JPG . WBMP , XPM و البته چندين فرمت ديگر که بايد پي اچ پي رو با اون ساطگاري بدين
پي اچ پي ميتونه عکس رو مستقيم به سوي مرو گر هدايت کنه
البته پي اچ پي به صورت پيش فرض اي ساخت عکس پشتيباني نميکنه که بايد آن را نصب کنيد ( GD ) البته اين کتابخانه ( library ) روي بيشتر سرور ها به صورت پيش فرض نصب هست ...
اما اگر نصب نبود ميتوانيد اين را از http://www.boutell.com/gd/ اينجا دانلود و نصب کنيد و يا به مدير سرور خود بگوييد که آن را نصب کند ...
در جيدي پشتيباني از PNG در نسخه 1.6 به بعد به وجود آمد و پشتيباني از GIF در نسخه -2.0.28 به وجود آمد

يک مثال :
PHP:
<?php

header("Content-type: image/png");
$string = $_GET['text'];
$im     = imagecreatefrompng("images/button1.png");
$orange = imagecolorallocate($im, 220, 210, 60);
$px     = (imagesx($im) - 7.5 * strlen($string)) / 2;
imagestring($im, 3, $px, 9, $string, $orange);
imagepng($im);
imagedestroy($im);

?>
براي استفاده از مثال بالا در صفحهات خود از اين دستور استاده کنيد :
HTML:
<img src="button.php?text=text">
حالا اين مثال چيکار ميکنه ؟
مثال بالا ( button.php ) اول فايل images/button1.png رو باز ميکنه و بعد متغير TEXT رو روش مينويشه ( به صورت يک لايه جدا )
مثلا اگ شما دکمه هاي يکجور زيادي با متن متفاوت داريد ميتوانيد با استفاده از اين اسکيپت در وضا صرفه جويي کنيد و ديگر همه دکمه ها را در سايت آپلود نکنيد و به عبارتي دکمه به صورت ديناميکي ( dynamically ) ساخته ميشود








در پايين ليست و نحوه استفاده تمامي توابع gd نوشته شده :

gd_info
دادن اطلاعات در باره نسخه و ديگر چيزهاي GD نصب شده
:
اين تابع خروجي از نسخه چي دي و فرمت هاي پشتيباني شده توسط جي دي و ... را به شما ميدهد :

PHP:
<?php
print_r(gd_info());
?>
مثال بالا خروجي زير را بدنبال داره ( براي همه يکسان نيست )
کد:
Array
(
    [GD Version] => bundled (2.0.28 compatible)
    [FreeType Support] => 1
    [FreeType Linkage] => with freetype
    [T1Lib Support] => 
    [GIF Read Support] => 1
    [GIF Create Support] => 1
    [JPG Support] => 1
    [PNG Support] => 1
    [WBMP Support] => 1
    [XBM Support] => 1
    [JIS-mapped Japanese Font Support] => 
)

------------------------------
getimagesize
گرفتم اندازه عکس ( ابعاد)
با استفاده از اين تابع ميتوان اندازه عکس رو به دست آورد مثلا 48*52
اين تابع از GIF, JPG, PNG, SWF, SWC, PSD, TIFF, BMP, IFF, JP2, JPX, JB2, JPC, XBM, or WBMP پشتيباني ميکند
مثلا :
PHP:
<?php
list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");
echo "<img src=\"img/flag.jpg\" $attr alt=\"getimagesize() example\" />";
?>
در نسخه 4.0.5 به بعد از URL هم پشتيبانش شد :
PHP:
<?php 
$size = getimagesize("http://www.example.com/gifs/logo.gif");
?>


------------------------------
image_type_to_extension
گرفتن پسون عکس براي image type ()
روش استفاده :
PHP:
image_type_to_extension ( int imagetype [, bool include_dot] )



-----------------------------
image_type_to_mime_type
گرفتن mime type يک عکس
( mime type در شناسوندن نوع عکس ( مثلا PNG ) به مرور گر کاربرد دارد البته در حاهاي ديگر هم کاربرد دارد )
مثال :
PHP:
<?php
header("Content-type: " . image_type_to_mime_type(IMAGETYPE_PNG));
?>

اين تابع ميتواند حاوي يکي از خروجي هاي زير باشد :
خروجي نوع عکس
IMAGETYPE_GIF image/gif
IMAGETYPE_JPEG image/jpeg
IMAGETYPE_PNG image/png
IMAGETYPE_SWF application/x-shockwave-flash
IMAGETYPE_PSD image/psd
IMAGETYPE_BMP image/bmp
IMAGETYPE_TIFF_II(intel byte order) image/tiff
IMAGETYPE_TIFF_MM (motorola byte order) image/tiff
IMAGETYPE_JPC application/octet-stream
IMAGETYPE_JP2 image/jp2
IMAGETYPE_JPX application/octet-stream
IMAGETYPE_JB2 application/octet-stream
IMAGETYPE_SWC application/x-shockwave-flash
IMAGETYPE_IFF image/iff
IMAGETYPE_WBMP image/vnd.wap.wbmp
IMAGETYPE_XBM image/xbm

توجه : اين تابع نيازي به کتابخانه جي دي ندارد
15.gif


--------------------------------------
image2wbmp
دادن خروجي به يک فايل يا مرور گر
مثال :
PHP:
<?php

$file = 'php.png';
$image = imagecreatefrompng($file);

header('Content-type: ' . image_type_to_mime_type(IMAGETYPE_WBMP));
image2wbmp($image); // output the stream directly

?>


لیست بقیه توابع رو بعدا میزارم ( حد اکثر تا هفتهی دیگر ...)
 

iransbs

کاربر تازه وارد
تاریخ عضویت
3 می 2005
نوشته‌ها
471
لایک‌ها
0
محل سکونت
ایران، مازندارن، ساری
عزیز حالا که داری ضحمت می کشی هر تابع رو جدا جدا توضیح بده این طوری مثل همون آموزش مرج پی اچ پی شد
توضیح تابع ها بیشتر بدرد دوستان می خوره تا مثال
 

sama_sally

Registered User
تاریخ عضویت
5 آپریل 2005
نوشته‌ها
2,598
لایک‌ها
1
سن
35
محل سکونت
Essen, Deutschland
من GD LIBRARY رو رو سرورم آپ کردم الان سرور خرابه شب که درست شد همینجا آدرسشو میدم...
مرسی دوست خوبم!
 

siavashmusic

Registered User
تاریخ عضویت
6 فوریه 2005
نوشته‌ها
1,207
لایک‌ها
2
محل سکونت
بندرانزلی
آقا کارت درسته همین چور ادامه بده خلاصه این کار واسه کسایی هم که حرفه ای هستنند هم ارزش داره چون توی این جور مباحث مثال هست که به آموزش شکل میده و مطرح شدن یه سوال دها سوال رو پیش میکشه و اون وقت میبینی با یه مثال جواب 10 تا سوال دیگه خودت رو گرفتی

آموزش با مثال دستت درد نکنه همین جور ادامه بده
 

carp3

کاربر تازه وارد
تاریخ عضویت
15 آپریل 2005
نوشته‌ها
1,318
لایک‌ها
1
سن
94
این هفته وقط ندارم - یقیه هفته بعد ....
 

carp3

کاربر تازه وارد
تاریخ عضویت
15 آپریل 2005
نوشته‌ها
1,318
لایک‌ها
1
سن
94
-----------------
imagealphablending
دادن حالت محو بودن به يک عکس يا نوشته
به قول شير فرهاد اينکه گفتي يعني چه ؟
يعني اين :
mphp-logo.jpg


اگه تو عکس بالا دقت کرده باشين ميبينيد که هم carp3 ديئه ميشه هم آرم پي اچ پي !
يعني تو هم مخلوط شدن ! يا اگه با فوتشاپ کار کرده باشين اوپاسيتي رو کم ميکونه ! :D

اين مثال نداره !
توجه : اين تابع در جي دي 2.0.1 به بعد پشتيباني ميشود ...


--------------------
imageantialias
جلوگيري از نام مستعار يا خير ...
نحوه استفاده :
PHP:
imageantialias ( resource im, bool on )

----------------------
imagearc
با اين تابع ميتونيد عکس هاي هندسي بکشيد مثل دايره - بيضي - تخم مرغ
24.gif
!
نحوه استفاده :
PHP:
imagearc ( resource image, int cx, int cy, int w, int h, int s, int e, int color )
مثال :

PHP:
<?php

// create a 200*200 image
$img = imagecreatetruecolor(200, 200);

// allocate some colors
$white = imagecolorallocate($img, 255, 255, 255);
  
// draw a white circle 
imagearc($img, 100, 100, 150, 150, 0, 360, $white);

// output image in the browser
header("Content-type: image/png");
imagepng($img);
  
// free memory
imagedestroy($img);

?>
اين مثال يک دايره در يک عکس 200*200 درست ميکنه

----------
imagechar
کشيدن يک حرف به صورت افقي :
مثال :
PHP:
<?php

$im = imagecreatetruecolor(100, 100);

$string = 'PHP';

$bg = imagecolorallocate($im, 0, 0, 0);
$black = imagecolorallocate($im, 100, 100, 100);

// prints a gry "P" in the top left corner
imagechar($im, 20, 0, 0, $string, $black);

header('Content-type: image/png');
imagepng($im);

?>


----------
imagecharup
عين تابع بالا ولي با اين فرق که حرف رو به صورت عمودي مينويسه :
PHP:
<?php

$im = imagecreatetruecolor(100, 100);

$string = 'Note that the first letter is a N';

$bg = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 150, 150, 150);

// prints a black "Z" on a white background
imagecharup($im, 3, 10, 10, $string, $black);

header('Content-type: image/png');
imagepng($im);

?>
---------------
imagecolorallocate
احتصاص دادن يک رنگ به يک عکس
مثال :
PHP:
<?php

$im = imagecreatetruecolor('example.jpg');
// sets background to red
$background = imagecolorallocate($im, 255, 0, 0);

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

// hexadecimal way
$white = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
$black = imagecolorallocate($im, 0x00, 0x00, 0x00);

?>

-----------------------
imagecolorallocatealpha
احتصاص دادن يک رنگ به يک عکس ( حالت محو )
در مثال زير که يک مقدار پيشرفته است ولي راحته شما 3 تا دايره که تو هم محو شدن يا به عبارتي تو هم رقتن ! رو ميبينيد :
PHP:
<?php
$size = 300;
$image=imagecreatetruecolor($size, $size);

// something to get a white background with black border
$back = imagecolorallocate($image, 255, 255, 255);
$border = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 0, 0, $size - 1, $size - 1, $back);
imagerectangle($image, 0, 0, $size - 1, $size - 1, $border);

$yellow_x = 100;
$yellow_y = 75;
$red_x    = 120;
$red_y    = 165; 
$blue_x   = 187;
$blue_y   = 125; 
$radius   = 150;

// allocate colors with alpha values
$yellow = imagecolorallocatealpha($image, 255, 255, 0, 75);
$red    = imagecolorallocatealpha($image, 255, 0, 0, 75);
$blue   = imagecolorallocatealpha($image, 0, 0, 255, 75);

// drawing 3 overlapped circle
imagefilledellipse($image, $yellow_x, $yellow_y, $radius, $radius, $yellow);
imagefilledellipse($image, $red_x, $red_y, $radius, $radius, $red);   
imagefilledellipse($image, $blue_x, $blue_y, $radius, $radius, $blue);

// don't forget to output a correct header!
header('Content-type: image/png');

// and finally, output the result
imagepng($image);
imagedestroy($image);
?>



imagecolorat
گرفتن رنگ يک پيکسل از يک عکس :
PHP:
<?php
$im = ImageCreateFromPng("pic.png");
$rgb = ImageColorAt($im, 2, 2);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
?>
---------------
imagecolorclosest
گرفتن رنگ هاي بسته از يک عکس :
نحوه استفاده :
PHP:
 imagecolorclosest ( resource image, int red, int green, int blue )
// ya : 
imagecolorclosest($im, $r, $g, $b);

imagecolorclosestalpha
گرفتن رنگ هاي بسته از يک عکس : همراه با آلفا
توجه : اين تابع در جي دي 2.0.1 بخ بعد موجود ميباشد

بقیه رو بعدا ...
 

mtakami

کاربر تازه وارد
تاریخ عضویت
14 می 2006
نوشته‌ها
16
لایک‌ها
0
فايلهائي كه توي تاپيك جالب آموزش پی اچ پی - قسمت ششم - جی دی اشاره شده بود دريافت كردم .
چطور مي تونم جي دي رو روي لوكال هاست فعال كنم ؟
الان هم var_dump(gd_info());
و هم print_r(gd_info()); ارور ميده
 

Parsa_361

کاربر فعال صفحات داینامیک
کاربر فعال
تاریخ عضویت
5 آگوست 2005
نوشته‌ها
889
لایک‌ها
10
محل سکونت
Isfahan, php.ini
باید از تابع imagecopyresized استفاده کنی
من یه تابع خوب نوشتم برای این کار. فقط یکم دستکاری میخواد چون یه متد از کلاس هست، خودت درستش کن :
PHP:
 function setsize($wimg = "", $himg = "")
{
//............................................................
if (($wimg != "") OR ($wimg != NULL))
{
if (strstr($wimg, "%"))
{
$a2 = substr($wimg, 1);
$wimg = ($this-> fsw * ($a2 / 100));
}
}
else $wimg = $this-> fsw;
if (($himg != "") OR ($himg != NULL))
{
if (strstr($himg, "%"))
{
$a3 = substr($himg, 1);
$himg = ($this-> fsh * ($a3 / 100));
}
}
else $himg = $this-> fsh;
//............................................................
$nim = imagecreatetruecolor($wimg, $himg);
imagecopyresized($nim, $this-> im, 0, 0, 0, 0, $wimg, $himg, $this-> fsw, $this-> fsh);
//............................................................
$this-> im = $nim;
$this-> fsw = $wimg;
$this-> fsh = $himg;
//............................................................
}
به جای $this-> im سورس عکس رو بزار ، به جای $this-> fsw طول عکس و به جای $this-> fsh عرض عکس رو بزار
در این تابه میتونی برای تغییر سایز از % استفاده کنی. مثلاً اگه طول بزنی 50% ، طول عکس رو نصف میکنه (کوچیک میکنه)
;)
 

PHP

کاربر تازه وارد
تاریخ عضویت
17 فوریه 2007
نوشته‌ها
11
لایک‌ها
0
باید از تابع imagecopyresized استفاده کنی
من یه تابع خوب نوشتم برای این کار. فقط یکم دستکاری میخواد چون یه متد از کلاس هست، خودت درستش کن :
PHP:
 function setsize($wimg = "", $himg = "")
{
//............................................................
if (($wimg != "") OR ($wimg != NULL))
{
if (strstr($wimg, "%"))
{
$a2 = substr($wimg, 1);
$wimg = ($this-> fsw * ($a2 / 100));
}
}
else $wimg = $this-> fsw;
if (($himg != "") OR ($himg != NULL))
{
if (strstr($himg, "%"))
{
$a3 = substr($himg, 1);
$himg = ($this-> fsh * ($a3 / 100));
}
}
else $himg = $this-> fsh;
//............................................................
$nim = imagecreatetruecolor($wimg, $himg);
imagecopyresized($nim, $this-> im, 0, 0, 0, 0, $wimg, $himg, $this-> fsw, $this-> fsh);
//............................................................
$this-> im = $nim;
$this-> fsw = $wimg;
$this-> fsh = $himg;
//............................................................
}
به جای $this-> im سورس عکس رو بزار ، به جای $this-> fsw طول عکس و به جای $this-> fsh عرض عکس رو بزار
در این تابه میتونی برای تغییر سایز از % استفاده کنی. مثلاً اگه طول بزنی 50% ، طول عکس رو نصف میکنه (کوچیک میکنه)
;)



خوب آقا دمت گرم

ولی من درست نفهمیدم

الان اگه بخواهیم اندازه عکس 150*150 باشه و اسم عکس Ali.jpg برامون جایگزین میکنی ببینیم چون در مثال بالا خیلی گیج شدم

ممنون میشم
 

ferferi

Registered User
تاریخ عضویت
26 جولای 2005
نوشته‌ها
182
لایک‌ها
1
حالا اگه یک عکس مثلا 1024 در 768 داشته باشیم و بخوایم یک پنجره 100 در 200 ازش جدا کنیم و به یک اسم دیگه ذخیره کنیم باید چکار کنیم؟
 
بالا