گرافیک بیتی پًیا در phpبا استفادٌ از GD ػطح :هقذهبسی هؤلف Jacek Artymiak :
هششجن :هؼؼَد اهجذی
بخص ايل -قبل از ایىکٍ ضريع کىیذ در مًرد ایه آمًزش اگش دس کبس یب دشٍطُ سبى ًیبص ثِ ًَؿشي ثشًبهِ ّبی گشافیکی ثب phpسا داؿشِ ثبؿیذ ،ایي آهَصؽ هی سَاًذ ؿوب سا دس سَلیذ سلبٍیش ثیشی دَیب ثب اػشفبدُ اص ٍ phpکشبثخبًِ ی gdیبسی کٌذ. یک ػکغ ثْشش اص ّضاس کلوِ اػز ،هخلَكب اگش اص آى ثشای ًـبى دادى سجبسر ،اهَس هبلی یب اطالػبر ػلوی اػشفبدُ ؿَد .اگش ؿوب ثشَاًیذ سلبٍیش سا ثب سَجِ ثِ دسخَاػز ّب ایجبد کٌیذ، سبثیش آًْب چٌذیي ثشاثش هی ؿَد ٍ هی سَاًذ آخشیي اطالػبر سا دس قبلت سلبٍیش ثِ سلَیش ثکـذ.
اَذاف دس دبیبى ایي آهَصؽ ؿوب قبدس خَاّیذ ثَد اػکشیذز ّبیی سا ثشای ایجبد سلبٍیش ثیشی ثب ٍ phpکشبثخبًِ ی gdثٌَیؼیذ .ؿوب خَاّیذ سَاًؼز ثِ ساحشی اطالػبر سجبسی ،هبلی ٍ ػلوی سا ثِ سلَیش ثکـیذ .ثِ ٍیظُ ؿوب هَاسد صیش سا هی آهَصیذ : اكَل سٌظین ػیؼشن gd masoudmanson | Php & GD www.ParsBook.org
ً کبر هخلَف ػیؼشن ػبهل ثشای سؼْیل سٌظین ػیؼشن ً کبر هشثَط ثِ ًلت php/gd هشاحل آهبدُ ػبصی canvas , color palette , background fill/image اكَل اٍلیِ ی طشاحی ثب gd سوشیي ّبیی ثشای کوک ثِ اسائِ ی ًشبیج سلَیشی دادُ ّب ً کبسی دیشاهَى اًشخبة فشهز هٌبػت ثشای فبیل ّب دػشَسالؼول ّبیی ثشای جب دادى اػکشیذز ّبیشبى دس کذ ّبی html
سیستم مًرد ویاز ؿوب ًیبص داسیذ سب ثِ : یک ػیؼشن ػبهل خَة دػششػی داؿشِ ثبؿیذ .هي ػیؼشن ػبهل ّبی صیش سا دیـٌْبد هی کٌن : -
Linux Free/Net/OpenBSD Microsoft Windows XP/7 Mac OS X
دیگش ػیؼشن ّبی unixدبیِ ّن دس كَسسی کِ ثشَاًٌذ Apache , Php , gdسا اجشا کٌٌذ هی سَاًٌذ هَسد اػشفبدُ قشاس ثگیشًذ. یک CPUثب کالک 100MHzیب ثیـشش 32MBسم یب ثیـشش ّ 500MBبسد دیؼکػالٍُ ثش ایي ؿوب هی سَاًیذ اص یک HTTP serverکِ phpسا ػبدَسر هی کٌذ اػشفبدُ کٌیذ کِ دس ایي كَسر ثِ کشبثخبًِ ّبی صیش ًیض ًیبص خَاّیذ داؿز: masoudmanson | Php & GD www.ParsBook.org
freetype2 zlib libpng libjpeg6
-
ساخت ابسار مًرد ویاز با استفادٌ از سًرس کذ آوُا اگش ؿوب ًشَاًیذ ثؼشِ ّبی کبهذبیل ؿذُ ی آهبدُ سا ثشای ػیؼشن سبى دیذا کٌیذ هججَس خَاّیذ . ثؼبصیذGCC ّوبًٌذANSI C/C++ ؿذ خَدسبى آًْب سا ثب اػشفبدُ اص یک کبهذبیلش : ثؼشِ ّبی هَسد ًیبص سا هی سَاًیذ اص لیٌک ّبی صیش دسیبفز کٌیذ • Apache: http://www.apache.org/dist/httpd/ • PHP: http://www.php.net/downloads.php • gd: http://www.boutell.com/gd/ • libpng: http://www.libpng.org/pub/png/libpng.html • zlib: http://www.gzip.org/zlib/ • libjpeg: http://www.ijg.org/ • freetype2 (optional, required for rendering TrueType fonts): http://www.freetype.org/ • t1lib (optional, required for rendering Type 1 fonts): http://freshmeat.net/projects/t1lib/ ثشای اطالػبر ثیـشش دس هَسد ًحَُ ی ًلت ٍ ػبخز ثؼشِ ّبی ثبال هی سَاًیذ ثِ فبیل ؿوب ثبیذ ثؼشِ ّب سا ثِ سشسیت صیش. ّش کذام اص آًْب هشاجؼِ کٌیذINSTALL یبREADME ّبی :ًلت کٌیذ masoudmanson | Php & GD www.ParsBook.org
-
zlib libpng libjpeg freetype2 t1lib gd Apache Php
اکثش ایي ثؼشِ ّب سا هی سَاى ثب کذ صیش ًلت کشد : $ ./configure $ ./make $ sudo ./make install
ابسار َای اضافی دیگش اثضاسی کِ ثشای ایي کبس ًیبص داسیذ یک هشٍسگش ٍة ٍ یک سکؼز ادیشَس هی ثبؿذ. ثشای هشٍسگش هی سَاًیذ اص ... ٍ Mozilla Firefox , Opera , Chrome , IEاػشفبدُ کٌیذ. ثشای ّ text editorن هی سَاًیذ اص vi , emacs , BBEditثشای لیٌَکغ ٍ Notepad , Wordpad , ...ثشای ٍیٌذٍص اػشفبدُ کٌیذ.
تست php/gd صهبًی کِ سوبهی اثضاس ّبی هَسد ًیبص سا ًلت کشدیذ هی سَاًیذ ثب اػشفبدُ اص دٍ اػکشیذز ػبدُ صیش هطوئي ؿَیذ کِ gdؿوب فؼبل ؿذُ اػز ٍ کبس هی کٌذ. اثشذا یک كفحِ ی ػبدُ phpایجبد کشدُ ٍ کذ صیش سا دس آى ثٌَیؼیذ : <?php ;)(phpinfo >?
اػکشیذز ثبال سا ثب ًبم test.phpدس دایشکشَسیِ wwwخَد رخیشُ کشدُ ٍ ثب هشٍسگش اجشا کٌیذ. ثِ كَسر : masoudmanson | Php & GD www.ParsBook.org
http://localhost/test.php
سفشِ ٍ ثشسػیgd ثِ قؼوز. خَاّیذ دیذphp دس ایي كفحِ ؿوب جذٍل ثضسگی اص سوبهی هَاسد کٌیذ کِ آیب فؼبل ؿذُ اػز یب ًِ ؟
: ثٌَیؼیذgd ػذغ اػکشیذز صیش سا ثشای سؼز <?php header (“Content-Type: iamge/jpeg”); #set the dimentions of the canvas $cw = 500; $ch = 300; #create canvas $c = imagecreate ($cw , $ch); #generate color palette for ($n=0 ; $n <=255 ; $n++) { $cols[$n] = imagecolorallocate ($c , $n , $n , $n); } #create background imagefilledrectangle ($c , 0 , 0 , 600 , 400 , $cols[255]);
masoudmanson | Php & GD www.ParsBook.org
#display all characters in a font $font = 4; $dx = imagefontwidth($font); $dy = imagefontheight($font); $x = ($cw / 2) - (16 * $dx); $y = ($ch / 2) - (4 * $dy); $m = 0; $z = 0; for ($n = 0; $n <= 7; $n++) { for ($m = 0; $m <= 31; $m++) { imagechar($c, $font, $x + $dx * $m, $y, chr($z), $cols[0]); $z++; } $y = $y + $dy; } #draw a nice thin border around the edges of the image imagerectangle($c, 0, 0, $cw-1, $ch-1, $cols[0]); #generate image imagejpeg($c); ?>
:ًشیجِ ی کذ ثبال ؿکل صیش خَاّذ ثَد
masoudmanson | Php & GD www.ParsBook.org
بخص ديم -بروامٍ ی خًدتان را بىًیسیذ :قذم َای ايل با headerدرست ضريع کىیذ حبال کِ سؼز ّبی اٍلیِ سا اًجبم دادیذٍ ،قز آى اػز کِ اػکشیذز ّبی gdخَدسبى سا ثٌَیؼیذ. ثشای ایي کبس ؿوب ثبیذ ػبخشبس ّبی ػوَهی یک اػکشیذز gdسا یبد ثگیشیذ. ّش اػکشیذشی کِ گشافیک ایجبد هی کٌذ ثبیذ ثب کذ صیش ؿشٍع ؿَد: ;)”header (“Content-Type: image/jpeg
ثب اػشفبدُ اص سبثغ )( headerؿوب HTTP headersسا کِ سَػط ػشٍیغ دٌّذُ ی HTTP ( )HTTP Serverثِ ػشٍیغ گیشًذُ )HTTP Client( HTTPاسػبل هیگشدد سا هقذاس دّی هی کٌیذ .یکی اص ایي ّ headerب Content-Type ،هی ثبؿذ کِ ثِ HTTP Clientاػالم هی کٌذ کِ چِ ًَع دادُ ای دسیبفز خَاّذ کشد client .اص ایي اطالػبر ثشای سلوین گیشی دس هَسد ًحَُ ی اجشای دادُ ّبی دسیبفشی اػشفبدُ هی کٌذ .ػذغ هوکي اػز clientثشای دشداصؽ ایي دادُ ّب اص هجذل ّبی خبسجی اػشفبدُ کٌذ یب دیغبهی هجٌی ثش ایٌکِ ثِ سٌْبیی ًوی سَاًذ ایي اطالػبر سا دشداصؽ کٌذ ،كبدس ًوبیذ. ثشای هثبل image/jpeg ،ثِ clientهی گَیذ کِ یک ػکغ ثیشی دس فشهز jpegسا دسیبفز خَاّذ کشد .حبال clientهی سَاًذ سلوین ثگیشد کِ آیب دادُ ی دسیبفشی سا دشداصؽ کٌذ ،اص یک ًوبیـگش خبسجی اػشفبدُ کٌذ یب ثِ کبسثش ثگَیذ کِ ًوی سَاًذ ایي ًَع خبف سلَیش سا ًوبیؾ دّذ. ثؼذ اص ایٌکِ Content-Typeثِ هشٍسگش اسػبل ؿذ ،اػکشیذز ؿوب هی سَاًذ کبسی سا کِ ثشای آى هٌظَس طشاحی ؿذُ اػز سا اًجبم دّذ .ثِ خبطش ثؼذبسیذ کِ سٌْب خشٍجی اػکشیذز ؿوب سؿشِ ّبی ثیشی هی ثبؿذ کِ سلَیش سا سـکیل هی دٌّذ .ایي اهش ثبػث هی ؿَد سب ًشَاًیذ اص دػشَساسی هثل print ٍ echoثشای ًَؿشي کذ ّبی htmlدس آى اػکشیذز اػشفبدُ کٌیذ.
masoudmanson | Php & GD www.ParsBook.org
اهب ًگشاى ًجبؿیذ ،دس اداهِ ی ّویي آهَصؽ ًحَُ ی افضٍدى کذ ّبی htmlسا ثِ یک اػکشیذز gdثشسػی خَاّین کشد .فؼال ًحَُ ی ػبخشي یک سلَیش bitmapثب gdسا یبد ثگیشیذ.
آمادٌ سازی ( canvasپردٌ وقاضی) قبل از ایىکٍ چیسی بکطیذ مثل یک وقاش ياقعی ايل پردٌ وقاضی ( )canvasرا آمادٌ کىیذ .ایه کار را می تًاویذ با فراخًاوی تابع )( imagecreateاوجام دَیذ: #set the dimentions of the canvas ;$cw = 500 ;$ch = 300 #create canvas ;)$c = imagecreate ($cw , $ch
ػذدی کِ سبثغ )( imagecreateثش هیگشداًذ سَػط سوبهی سَاثؼی کِ ثب ػکغ کبس داسًذ هَسد اػشفبدُ قشاس هی گیشد .ایي کبس ثِ ؿوب ایي اهکبى سا هیذّذ کِ ثشَاًیذ ثیؾ اص یک ػکغ سا دس یک اػکشیذز ایجبد کٌیذ .ثْش حبل ،اػشفبدُ اص ایي ٍیظگی هحذٍدیز ّبیی ّن داسد ،چشا کِ اػکشیذز هی سَاًذ سٌْب یک ػکغ سا ثِ HTTP Clientای کِ فشاخَاًی اؽ کشدُ ،ثفشػشذ. اص طشفی دیگش ّوبى طَس کِ ثؼذا خَاّیذ دیذ ،هی سَاًیذ دٍ یب چٌذ ػکغ سا ثب ّن سشکیت کٌیذ ٍ یب ػکغ ّب سا دس local diskیب serverرخیشُ کٌیذ. سَجِ کٌیذ کِ هقبدیش dimensionکِ طَل ٍ ػشم ػکغ سا هـخق هی کٌٌذ ثبیذ ثب هقبدیش height ٍ widthدس سگ > <imgثشاثش ثبؿٌذ .دس غیش ایي كَسر سلَیش ًوبیؾ دادُ هی ؿَد، اهب ثِ ّن هی سیضد .حشوب ثِ ایي هَسد دقز کٌیذ.
ایجاد ( Paletteجعبٍ ی روگ)
masoudmanson | Php & GD www.ParsBook.org
اکٌَى ٍقز آى سػیذُ کِ کوی ثب سًگ ّب ثبصی کٌیذ .اگش چِ gd 2.xهی سَاًذ ثب paletteچٌذ هیلیَى سًگی کبس کٌذ اهب ثْشش اػز ؿوب اًذاصُ ی paletteسبى سا 256سًگ اًشخبة کٌیذ سب ّن ثب ّ gd 1.8.xوبٌّگ ثبؿذ ٍ ّن ثب ًؼخِ ّبی ثبالسش .gd ّش سًگ دس paletteثب فشاخَاًی سبثغ )( imagecolorallocateسَلیذ هی ؿَد کِ ایي سبثغ چْبس آسگَهبى دسیبفز هیکٌذ : جبیگبُ سًگ دس palette هقذاس هـخلِ ی redػذدی ثیي 255-0 هقذاس هـخلِ ی greenػذدی ثیي 255-0 هقذاس هـخلِ ی blueػذدی ثیي 255-0ثشای هثبل کذ صیش یک paletteخبکؼششی ایجبد هی کٌذ: # Generate color palette )for ($n = 0; $n <= 255; $n++ { ;)$cols[$n] = imagecolorallocate($c, $n, $n, $n }
اگشچِ ًیبصی ًیؼز ؿوب کل paletteسا دس اثشذا ثشًبهِ سؼشیف کٌیذ ٍ هی سَاًیذ آى سا ثؼذا دس طَل اػکشیذز ّن سغییش دّیذ ،اهب سؼشیف آى دس اثشذای کذ خیلی صیجبسش اػز .ثشای دٍثبسُ سؼشیف کشدى یک سًگ اص سبثغ )( imagecolorallocateثب ّوبى color ID ٍ canvas IDاهب ثب هقبدیش هشفبٍسی اص ، R , G , Bاػشفبدُ کٌیذ .ؿوب ّوچٌیي هی سَاًیذ یک سًگ سا ثب اػشفبدُ اص سبثغ )( imagecolordeallocateاص paletteدبک کٌیذ ،هثل : ;)]imagecolordeallocate($c , $cols[7
آمادٌ سازی ( Backgroundپس زمیىٍ) اکٌَى ؿوب آهبدُ ایذ سب ؿبّکبس خَد سا سػن کٌیذ .ؿوب آصادیذ سب اص ّش سکٌیکی کِ هی خَاّیذ اػشفبدُ کٌیذ ،اهب ثِ یبد داؿشِ ثبؿیذ کِ اگش چیضی سا سػن کشدیذ ًوی سَاًذ ًبقق ثوبًذ ،ثٌبثشایي سٍؿی کِ ػکغ خَد سا سػن هی کٌیذ هْن اػز. masoudmanson | Php & GD www.ParsBook.org
ثٌبثش ایي اٍلیي کبس ثشای اًجبم ،سًگ کشدى canvasثب اػشفبدُ اص یک سًگ ثبثز ٍ یب یک سلَیش importؿذُ اػز .هبًٌذ کذ صیش : # Create Background ;)]ImageFilledRectangle($c, 0, 0, 499, 299, $cols[255
ّیچ سبثغ خبكی دغ صهیٌِ سا ایجبد ًوی کٌذ ،ثٌبثشیي ؿوب هی سَاًیذ اص سبثغ )( imagefilledrectangleاػشفبدُ کٌیذ کِ یک هؼشطیل سًگی سا ثش سٍی canvasسػن هی کٌذ .آسگَهبى اٍل ایي سبثغ IDهؼشطیلی اػز کِ سػن ؿذُ اػز .چْبس آسگَهبى ثؼذی ثِ سشسیت هخشلبر گَؿِ ی ثبال ػوز چخ ٍ گَؿِ ی دبییي ػوز ساػز هی ثبؿذ .آسگَهبى آخش ّن ID سًگی اػز کِ ثِ هؼشطیل صدُ ؿذُ اػز .الجشِ هی سَاًیذ اص سبثغ )(imagefilledrectangle ثشای سػن هؼشطیل دس ّش جبی دیگشی اص اػکشیذز اػشفبدُ کٌیذ. سَجِ کٌیذ کِ سلبٍیش gdاص گَؿِ ی ثبال ػوز چخ ؿشٍع ؿذُ ٍ ثِ ػوز ساػز ٍ دبییي گؼششؽ هی یبثذ. سٍؽ دٍم اػشفبدُ اص فبیل ّبی آهبدُ ثِ ػٌَاى backgroundهی ثبؿذ .ثشای ایي هٌظَس هی سَاًیذ اص سَاثغ صیش اػشفبدُ کٌیذ: )(• ImageCreateFromGD )(• ImageCreateFromGD2 )(• ImageCreateFromGD2Part )(• ImageCreateFromGIF )(• ImageCreateFromJPEG )(• ImageCreateFromPNG )(• ImageCreateFromString )(• ImageCreateFromWBMP )(• ImageCreateFromXBM )(• ImageCreateFromXPM masoudmanson | Php & GD www.ParsBook.org
)(• ImageCreateFromJPEG آسگَهبى ّبی ایي سَاثغ هی سَاًٌذ هؼیش فبیل ّبی ٍ localیب urlفبیل ّبی ایٌششًشی ثبؿٌذ. ایي سٍؽ دػششػی ثِ فبیل ّب ،اهکبى ٍیظُ ای سا ثشای ًَؿشي اػکشیذز ّبیی فشاّن هی کٌذ کِ سلبٍیش ثِ سٍص ؿذُ هثل سلبٍیش هبَّاسُ ای یب سلبٍیش خجشی ٍ ...سا ثِ كَسر دیٌبهیک داًلَد هی کٌذ ٍ ؿوب هی سَاًیذ اطالػبسی سا کِ خَدسبى هی خَاّیذ ثِ آًْب اضبفِ کشدُ ٍ یب آًْب سا ثب سلبٍیش دیگش سشکیت کٌیذ .اگش gd 2.xسا ًلت کشدُ ثبؿیذ ،ایي ٍیظگی ّب ثْشش کبس خَاٌّذ کشد ٍ ؿوب اص یک paletteچٌذ هیلیَى سًگی ثْشُ هٌذ خَاّیذ ثَد. صهبًی کِ ؿوب سلَیشی سا ٍاسد هی کٌیذ ،هوکي اػز اًذاصُ آى سا الصم داؿشِ ثبؿیذ کِ هی سَاًیذ آى سا اص خشٍجی سبثغ )( getimagesizeدسیبفز ًوبییذ.
بخص سًم -اصًل ايلیٍ طراحی با gd با پیکسل َا بازی کىیذ دغ اص ایٌکِ baclgroundآهبدُ ؿذ هی سَاًیذ ّش آًچِ سا کِ هی خَاّیذ ثب اػشفبدُ اص سَاثغ صیش سػن کٌیذ: )(• ImageSetPixel )(• ImageLine )(• ImageDashedLine )(• ImageRectangle )(• ImageFilledRectanlge )(• ImagePolygon )(• ImageFilledPolygon )(• ImageArc )(• ImageFilledArc masoudmanson | Php & GD www.ParsBook.org
آسگَهبى ًیبص4 ِ ایي سبثغ فقط ث. یک دیکؼل سٌْب سا هی کـذimagesetpixel() یؼٌی،سبثغ اٍل : داسد Canvas ID X Coordinates Y Coordinates Color ID ؿوب هی سَاًیذ اص ایي سبثغ ثشای افضٍدى جضئیبر ثِ سلبٍیشسبى اػشفبدُ کٌیذ ٍ یب اص سبثغ : ّوبًٌذ هثبل صیش، اػشفبدُ کٌیذrandom() <?php header("Content-Type: image/jpeg"); #set the dimensions of the canvas $cw = 200; $ch = 200; #create canvas $c = imagecreate($cw, $ch); #generate color palette for ($n = 0; $n <= 255; $n++) { $cols[$n] = imagecolorallocate($c, $n, $n, $n); } #create background imagefilledrectangle($c, 0, 0, $cw, $ch, $cols[255]); #draw some pixels for ($n = 0; $n < $cw; $n++) { for ($m = 0; $m < $ch; $m++) { imagesetpixel($c, $n, $m, (int) rand(0, 255)); } $m = 0; } #generate image imagejpeg($c); ?>
: اػکشیذز ثبال سلَیشی ثِ كَسر صیش ایجبد خَاّذ کشد
masoudmanson | Php & GD www.ParsBook.org
بخص چُارم -تصًر دادٌ َای ايلیٍ ساخت یک ساعت با استفادٌ از خطًط ي مىحىی َا دس حبلی کِ سلبٍیش randomثؼیبس صیجب ّؼشٌذ ،اهب صیبد ثِ دسد ًوی خَسًذ (هگش ثشای طشاحبى گشافیکی کِ اص ایي سلبٍیش ثشای ایجبد ّ textureب اػشفبدُ هی کٌٌذ). هثبل صیش یک هثبل ثؼیبص جزاة سش اػز کِ ًحَُ ی اػشفبدُ اص gdثشای ثِ سلَیش کـیذى دادُ ّبی ٍاقؼی سا ًـبى هی دّذ. هي اص صهبى کًٌَی ثشای ػبخز ػبػشی کِ صهبى ػشٍس سا ًـبى هی دّذ اػشفبدُ هی کٌن .ایي ػبػز هثبل خَثی ثشای ًـبى دادى ًحَُ ی اػشفبدُ اص سَاثغ )(ٍ iamgeline() ، iamgearc )( imagedashedlineهی ثبؿذ. <?php ;)"header("Content-Type: image/jpeg # Set the dimensions of the canvas ;$cw = 300 ;$ch = 300 # Create canvas ;)$c = imagecreate($cw, $ch ;)0, 0, 0 ;)255, 255, 255 ;)255, 0, 0 ;)0, 255, 0 ;)255, 0, 255
color palette imagecolorallocate($c, imagecolorallocate($c, imagecolorallocate($c, imagecolorallocate($c, imagecolorallocate($c,
# Generate = ]$cols[0 = ]$cols[1 = ]$cols[2 = ]$cols[3 = ]$cols[4
masoudmanson | Php & GD www.ParsBook.org
# Create background imagefilledrectangle($c, 0, 0, $cw - 1,$ch - 1, $cols[1]); # Compute coordinates of the center of the image $x = (int) $cw / 2; $y = (int) $ch / 2; # Draw the circular border imagearc($c, $x, $y, (int) ($cw * .9),(int) ($ch * .9), 0, 360,$color[0]); # Read local time $t = localtime(); # Initialize hour, minute, and second variables $th = $t[2]; $tm = $t[1]; $ts = $t[0]; # Convert hour from 24- to 12-hour format if ($th > 11) { $th -= 11; } # Prepare some constants $hi = deg2rad(30); $mi = deg2rad(6); $adj = deg2rad(90); # Compute $th = $hi $tm = $mi $ts = $mi
coordinates of the hour, minute, and second hands * $th - $adj; * $tm - $adj; * $ts - $adj;
# Compute the length and the coordinates of # the hour hand $hhl = $cw * .6; $hhx = $hhl * cos($th); $hhy = $hhl * sin($th); # Compute the length and the coordinates of # the minute hand $mhl = $cw * .7; $mhx = $mhl * cos($tm); $mhy = $mhl * sin($tm); # Compute the length and the coordinates of # the second hand $shl = $cw * .8; $shx = $shl * cos($ts); $shy = $shl * sin($ts); # Draw the hour hand imageline($c, $x, $y, $x + $hhx, $y + $hhy, $cols[2]); # Draw the minute hand
masoudmanson | Php & GD www.ParsBook.org
;)]imageline($c, $x, $y, $x + $mhx, $y + $mhy, $cols[3 # Draw the second hand ;)]imagedashedline($c, $x, $y, $x + $shx, $y + $shy,$cols[4 # Generate image ;)imagejpeg($c >?
ثؼذ اص اجشای اػکشیذز ثبال ،ػبػز صیش سا خَاّیذ دیذ .حبال ّش ٍقز هشٍسگش خَد سا refresh کٌیذ ،صهبى localػشٍس سا خَاّیذ دیذ.
تصًیر سازی اطالعات عذدی هثبل ػبػز آًبلَگ یک هؼشفی جبلت ثشای سلَیش ػبصی دادُ ّب ثَد ،اهب اػشفبدُ اص آى دس هَسد دادُ ّب سجبسی ٍ ػلوی کوی هحذٍدیز ثِ ّوشاُ داسد .یک هثبل کبسثشدی سش ثشای سلَیش ػبصی دادُ ّب هی سَاًذ ًوَداس ًشبیج یک سحقیق دس ًَاحی هخشلف جغشافیبیی ثبؿذ. ثشای ایي هثبل فشم کٌیذ هي اص سَػؼِ دٌّذگبى کبلیفَسًیب ،سگضاع ٍ ًیَیَسک خَاػشِ ام سب ثِ هي ثگَیٌذ کِ اص کذام دػکشبح اػشفبدُ هی کٌٌذ KDE، Gnome ،یب . GNUStepػذغ هي
masoudmanson | Php & GD www.ParsBook.org
ایي دقیقب کبسی اػز کِ اػکشیذز صیش اًجبم هی.ًشبیج سا ثش سٍی ًقـِ ی آهشیکب ًـبى خَاّن داد .دّذ <?php header("Content-Type: image/jpeg"); # Set the dimensions of the canvas $cw = 300; $ch = 300; # Define chart-drawing function function drawchart($c, $cx, $cy, $v1, $v2, $v3,$c0, $c1, $c2, $c3) { imagefilledrectangle($c, $cx, $cy - $v1,$cx + 10, $cy, $c1); imagerectangle($c, $cx, $cy - $v1,$cx + 10, $cy, $c0); imagefilledrectangle($c, $cx + 5, $cy - $v2,$cx + 15, $cy, $c2); imagerectangle($c, $cx + 5, $cy - $v2,$cx + 15, $cy, $c0); imagefilledrectangle($c, $cx + 10, $cy - $v3,$cx + 20, $cy, $c3); imagerectangle($c, $cx + 10, $cy - $v3,$cx + 20, $cy, $c0); } # Map displacement values $mdx = 0; $mdy = 0; # Make array of map points $usa[0] = 30 + $mdx; $usa[1] = 50 + $mdy; $usa[2] = 15 + $mdx; $usa[3] = 90 + $mdy; $usa[4] = 40 + $mdx; $usa[5] = 130 + $mdy; $usa[6] = 85 + $mdx; $usa[7] = 135 + $mdy; $usa[8] = 120 + $mdx; $usa[9] = 170 + $mdy; $usa[10] = 130 + $mdx; $usa[11] = 140 + $mdy; $usa[12] = 180 + $mdx; $usa[13] = 125 + $mdy; $usa[14] = 200 + $mdx; $usa[15] = 160 + $mdy; $usa[16] = 215 + $mdx; $usa[17] = 165 + $mdy; $usa[18] = 195 + $mdx; $usa[19] = 105 + $mdy; $usa[20] = 210 + $mdx; $usa[21] = 70 + $mdy; $usa[22] = 200 + $mdx; $usa[23] = 60 + $mdy; $usa[24] = 215 + $mdx; $usa[25] = 15 + $mdy; $usa[26] = 195 + $mdx; $usa[27] = 10 + $mdy; $usa[28] = 165 + $mdx; $usa[29] = 50 + $mdy; $usa[30] = 105 + $mdx; $usa[31] = 55 + $mdy; $usa[32] = 95 + $mdx; $usa[33] = 45 + $mdy; # Create canvas $c = imagecreate($cw, $ch); # Generate $cols[0] = $cols[1] = $cols[2] = $cols[3] = $cols[4] = $cols[5] =
color palette imagecolorallocate($c, imagecolorallocate($c, imagecolorallocate($c, imagecolorallocate($c, imagecolorallocate($c, imagecolorallocate($c,
0, 0, 0); 255, 255, 255); 255, 0, 0); 0, 255, 0); 0, 0, 255); 255, 255, 0);
masoudmanson | Php & GD www.ParsBook.org
# Create background ;)]imagefilledrectangle($c, 0, 0, $cw - 1,$ch - 1, $cols[1 # Draw map ;)]imagefilledpolygon($c, $usa, 17, $cols[3 # Draw map outline ;)]imagepolygon($c, $usa, 17, $cols[0 drawchart($c, 190, 100, 80, 70,55,$cols[0], $cols[4], ;)]$cols[2],$cols[5 drawchart($c, 100, 140, 60, 65, 40,$cols[0], $cols[4], ;)]$cols[2],$cols[5 drawchart($c, 40, 100, 40, 90, 55,$cols[0], $cols[4], ;)]$cols[2],$cols[5 # Generate image ;)imagejpeg($c >?
ًشیجِ اػکشیذز ثبال ،سلَیش صیش خَاّذ ثَد :
سَجِ کٌیذ کِ دس اػکشیذز ثبال هي سبثغ )( drawchartسا ثشای سػن ًوَداس ّب ایجبد کشدُ ام سب کبسم ساحز سش گشدد .ؿوب ّن هی سَاًیذ اص ایي سٍؽ دس کبس ّبیشبى اػشفبدُ کٌیذ. ًقـِ ی آهشیکبیی کِ دس هثبل ثبال کـیذُ ؿذُ اػز ،یک ًقـِ ی ثؼیبس ػبدُ هی ثبؿذ کِ ؿبهل آالػکب ٍ ّبٍایی ًیؼز .ایي ًقـِ ثب اػشفبدُ اص سَاثغ )(ٍ imagepolygon )( imagefilledpolygonکـیذُ ؿذُ اػز کِ ّش دٍ سبثغ آسایِ ای اص اػذاد سا ثِ ػٌَاى هخشلبر ًقبط چٌذ ضلؼی دسیبفز هی کٌٌذ.
افسيدن کمی مته
masoudmanson | Php & GD www.ParsBook.org
اهب ثب اػشفبدُ اص کوی هشي هی سَاى آى،هثبل قجلی کبس خَثی اص سجذیل هقبدیش ػذدی ثِ سلبٍیش ثَد هی سَاًیذ هشَى افقی ٍ ثب اػشفبدُ اص سبثغimagestring() ثب اػشفبدُ اص سبثغ.سا هفیذ سش ًیض کشد ّش دٍ سبثغ آسگَهبى ّبی صیش سا. هشَى ػوَدی سا دس سلبٍیش خَد ثٌَیؼیذimagestringup() : ًیبص داسًذ Canvas ID Font ID X Coordinates Y Coordinates Text string Color ID
-
فًَز سَکبس ثیشی سا هـخق5 هی ثبؿذ کِ یکی اص5-1 یک هقذاس كحیح دس ثبصُ یFont ID .هی کٌذ ِ کذ صیش سَػؼِ یبفش.اػکشیذز صیش ًحَُ ی اػشفبدُ اص ایي سَاثغ سا دس ػول ثِ ؿوب ًـبى هی دّذ .ی هثبل قجل اػز <?php header("Content-Type: image/jpeg"); # Set the dimensions of the canvas $cw = 300; $ch = 300; # Define chart-drawing function function drawChart($c, $cx, $cy, $v1, $v2, $v3,$c0, $c1, $c2, $c3) { ImageFilledRectangle($c, $cx, $cy - $v1,$cx + 10, $cy, $c1); ImageRectangle($c, $cx, $cy - $v1,$cx + 10, $cy, $c0); ImageFilledRectangle($c, $cx + 5, $cy - $v2,$cx + 15, $cy, $c2); ImageRectangle($c, $cx + 5, $cy - $v2,$cx + 15, $cy, $c0); ImageFilledRectangle($c, $cx + 10, $cy - $v3,$cx + 20, $cy, $c3); ImageRectangle($c, $cx + 10, $cy - $v3,$cx + 20, $cy, $c0); } # Map displacement values $mdx = 0; $mdy = 0;
masoudmanson | Php & GD www.ParsBook.org
# Make array of map points $usa[0] = 30 + $mdx; $usa[1] = 50 + $mdy; $usa[2] = 15 + $mdx; $usa[3] = 90 + $mdy; $usa[4] = 40 + $mdx; $usa[5] = 130 + $mdy; $usa[6] = 85 + $mdx; $usa[7] = 135 + $mdy; $usa[8] = 120 + $mdx; $usa[9] = 170 + $mdy; $usa[10] = 130 + $mdx; $usa[11] = 140 + $mdy; $usa[12] = 180 + $mdx; $usa[13] = 125 + $mdy; $usa[14] = 200 + $mdx; $usa[15] = 160 + $mdy; $usa[16] = 215 + $mdx; $usa[17] = 165 + $mdy; $usa[18] = 195 + $mdx; $usa[19] = 105 + $mdy; $usa[20] = 210 + $mdx; $usa[21] = 70 + $mdy; $usa[22] = 200 + $mdx; $usa[23] = 60 + $mdy; $usa[24] = 215 + $mdx; $usa[25] = 15 + $mdy; $usa[26] = 195 + $mdx; $usa[27] = 10 + $mdy; $usa[28] = 165 + $mdx; $usa[29] = 50 + $mdy; $usa[30] = 105 + $mdx; $usa[31] = 55 + $mdy; $usa[32] = 95 + $mdx; $usa[33] = 45 + $mdy; # Create canvas $c = ImageCreate($cw, $ch); # Generate $cols[0] = $cols[1] = $cols[2] = $cols[3] = $cols[4] = $cols[5] =
color palette ImageColorAllocate($c, ImageColorAllocate($c, ImageColorAllocate($c, ImageColorAllocate($c, ImageColorAllocate($c, ImageColorAllocate($c,
0, 0, 0); 255, 255, 255); 255, 0, 0); 0, 255, 0); 0, 0, 255); 255, 255, 0);
# Create background ImageFilledRectangle($c, 0, 0, $cw - 1, $ch - 1, $cols[1]); # Draw map ImageFilledPolygon($c, $usa, 17, $cols[3]); # Draw map outline ImagePolygon($c, $usa, 17, $cols[0]); drawChart($c, 190, 100, 80, 70, 55, $cols[0], $cols[4], $cols[2], $cols[5]); drawChart($c, 100, 140, 60, 65, 40, $cols[0], $cols[4], $cols[2], $cols[5]); drawChart($c, 40, 100, 40, 90, 55, $cols[0], $cols[4], $cols[2], $cols[5]); # GNOME ImageFilledRectangle($c, 60, 203, 70, 210, $cols[2]); ImageRectangle($c, 60, 203, 70, 210, $cols[0]); ImageString($c, 2, 75, 200, "GNOME", $cols[0]); # KDE ImageFilledRectangle($c, 120, 203, 130, 210, $cols[4]); ImageRectangle($c, 120, 203, 130, 210, $cols[0]); ImageString($c, 2, 135, 200, "KDE", $cols[0]); # GNUStep ImageFilledRectangle($c, 165, 203, 175, 210, $cols[5]);
masoudmanson | Php & GD www.ParsBook.org
;)]ImageRectangle($c, 165, 203, 175, 210, $cols[0 ;)]ImageString($c, 2, 180, 200, "GNUStep", $cols[0 # Copyright info ;)]ImageStringUp($c, 1, 0, 145, "Copyright 2011 masoudmanson", $cols[0 # Generate image ;)ImageJPEG($c >?
ثؼذ اص اجشای اػکشیذز ثبال ؿوب سلَیش صیش سا خَاّیذ داؿز:
فًَز ّبی سَکبس ثیشی )ّ (build-in bitmap fontsویـِ دس دػششع ّؼشٌذ ،اهب اگش ؿوب ثخَاّیذ اص فًَز ّبی دیگشی اػشفبدُ کٌیذ ،ثبیذ کشبثخبًِ ی freetype2سا ًلت کشدُ ٍ اص سبثغ )( imagefttextثشای ًوبیؾ هشي ّبیشبى اػشفبدُ کٌیذ .ؿوب ّوچٌیي هی سَاًیذ اص Post ً Script Type 1 fontsیض اػشفبدُ کٌیذ کِ دس ایي كَسر ثِ کشبثخبًِ ی ً t1libیبص داسیذ ٍ دغ اص ًلت آى هی سَاًیذ اص سَاثغ )( imagepstext() ٍ imagepsloadfontاػشفبدُ کٌیذ. دس ّش دٍ هَسد ثبال ،ثبیذ gd ٍ phpایي کشبثخبًِ ّب سا ػبدَسر کٌٌذ .سَجِ کٌیذ کِ Type 1 fontsصهبى ثیـششی سا ًؼجز ثِ Trur Type fontsثشای سًذس ؿذى ًیبص داسًذ ٍ ،ایي اهذ هوکي اػز ثبػث timeoutؿذى اػکشیذز ؿوب گشدد.
masoudmanson | Php & GD www.ParsBook.org
بخص پىجم -قبل از ایىکٍ ضاَکارتان را بٍ تماضاگر بفرستیذ تصمیم بگیریذ چٍ وًع تصًیری می خًاَیذ ایجاد کىیذ؟ سب کٌَى ؿوب سلبٍیش jpegسا ایجبد کشدُ ایذ ،اهب ؿبیذ ؿوب ثخَاّیذ سلبٍیش PNGیب WBMP (دس ٍػبئلی کِ WAP-enabeldثبؿٌذ کبسثشد داسد ،هثل هَثبیل ّب) سَلیذ کٌیذ .ثشای ایي کبس سبثغ )( imagejpegسا ثب )( imagepngیب )( imagewbmpػَم کٌیذ .اگش ایي کبس سا کشدیذ فشاهَؽ ًکٌیذ کِ سغییشار صیش سا ًیض اػوبل کٌیذ ،یؼٌی : ;)”header (“Content-Type: image/jpeg
سا ثب ;)”header (“Content-Type: image/png
یب ;)”header (“Content-Type: image/vnd.wap.wbmp
جبثجب کٌیذ.
بخص ضطم -تعبیٍ کردن در بیه کذ َای html سب کٌَى ؿوب ثشای اػشفبدُ اص اػکشیذز ّبی ایي آهَصؽ آًْب سا ثِ كَسر هؼشقین فشاخَاًی هی کشدیذ ،دس حبلی کِ ایي هٌبػت سشیي سٍؽ ثشای دػششػی ثِ سلبٍیش سَلیذی سَػط اػکشیذز ّب ًیؼز .اگش ؿوب ثخَاّیذ اص اػکشیذششبى دس یک كفحِ ی htmlاػشفبدُ کٌیذ ،چِ؟ ایي کبس ثؼیبس ساحز اػز .سوبم کبسی کِ ؿوب ثبیذ ثکٌیذ قشاس دادى URLاػکشیذشی کِ سلبٍیش سا هی ػبصد دس آسگَهبى srcسگ ّب ی > <imgهی ثبؿذ:
masoudmanson | Php & GD www.ParsBook.org
<html> <head> <title>GD Tutorial</title> </head> <body> <img src="clock.php"> <img src="chart.php"> </body> </html>
: ؿکل صیش خشٍجی کذ ثبال هی ثبؿذ
masoudmanson | Php & GD www.ParsBook.org
About the author Jacek Artymiak works as a freelance consultant, developer, and writer. Since 1991 he's been developing software for many commercial and free variants of the UNIX and BSD operating systems (AIX, HP-UX, IRIX, Solaris, Linux, FreeBSD, NetBSD, OpenBSD, and others), as well as for the MS-DOS, Microsoft Windows, Mac OS, and Mac OS X operating systems. Jacek specializes in business and financial application development, Web design, network security, computer graphics, animation, and multimedia. He's a prolific writer on technology subjects and the coauthor of Install, Configure, and CustomizeSlackware Linux (Prima Tech, 2000) and StarOffice for Linux Bible (IDG Books, 2000). Find many of Jacek's software projects at SourceForge.net.
About the interpreter Since 2009 Iâ&#x20AC;&#x2122;m studing Information Technology in Institute for Advanced Studies in Basic Sciences (IASBS). E-mail : masoudmanson@gmail.com E-mail (2) : m.amjadi@iasbs.ac.ir Cellular phone : 09148401824 Blog : iasbs-it.mihanblog.com Masoud Amjadi
masoudmanson | Php & GD www.ParsBook.org
References 1- Installation manuals for gd 1.8.x (http://www.boutell.com/gd/manual1.8.4.html) and gd2.x (http://www.boutell.com/gd/manual2.0.1.html). 2- Installation manual for Apache (http://httpd.apache.org/docs/install.html). 3- Additional information for developers using PHP in Programming PHP , Rasmus Lerdorf and Kevin Tatroe, O'Reilly and Associates, 2002 (http://www.oreilly.com/catalog/progphp/). 4- For programming Web applications with PHP, see Web Database Applications with PHP and MySQL , Hugh E. Williams and David Lane, O'Reilly and Associates, 2002 (http://www.oreilly.com/catalog/webdbapps/). 5- For a general discussion of information visualization, read the Edward Tufte trilogy at Graphics Press: The Visual Display of Quantitative Information, 2001; Envisioning Information, 1990; and Visual Explanations: Images and Quantities, Evidence and Narrative, 1997 (http://www.edwardtufte.com/1028032219/tufte/). 6- Apple offers instructions on adding PHP for Mac OS X (http://developer.apple.com/internet/macosx/php.html).
masoudmanson | Php & GD www.ParsBook.org