PX : code

GD GIF Current Month Calendar by Matt Florell
Download this code


<?
################
# Calendar.php - creates a calendar gif with current day highlighted
# uses GD and TTF Fonts - can be changed to PNG format if desired
# resultant gif has transparent background to black, can easily be changed
# Gif that results is written to dategif/ directory
# and uses the datecode as it's name ex:(20000204.gif)
# the gif is usually betwen 5k and 7k in file size

# code is provided without warranty, documentation or support
# and is free to everyone, but don't sell it without asking first
# you can cut, copy and mutilated this code all you want,
# and you don't even have to give me credit if you use it!
# if you need help or you just really love this script,
# feel free to drop me a line and let me know.
# February 4, 2000 by Matt Florell (mattf@mail.com)
################

Header( "Content-type: image/gif");

    #create gd image
$im = ImageCreate(156, 142);
    # set colors
$black = ImageColorAllocate($im, 50, 50, 50);
$white = ImageColorAllocate($im, 255, 255, 255);
$orange = ImageColorAllocate($im, 255, 200, 0);
$yellow = ImageColorAllocate($im, 255, 255, 0);
$tan = ImageColorAllocate($im, 255, 255, 190);
$grey = ImageColorAllocate($im, 205, 205, 205);
$dkgrey = ImageColorAllocate($im, 140, 140, 140);

### Grey Lines ###
     #Outline
    ImageRectangle($im, 1, 1, 155, 141, $dkgrey);
     #Horizontal lines
    ImageRectangle($im, 1, 22, 155, 39, $dkgrey);
    ImageRectangle($im, 1, 56, 155, 73, $dkgrey);
    ImageRectangle($im, 1, 90, 155, 107, $dkgrey);
    ImageRectangle($im, 1, 107, 155, 124, $dkgrey);
     #verticle lines
    ImageRectangle($im, 23, 22, 45, 141, $dkgrey);
    ImageRectangle($im, 67, 22, 89, 141, $dkgrey);
    ImageRectangle($im, 111, 22, 133, 141, $dkgrey);

### White Lines ###
     #Outline
    ImageRectangle($im, 0, 0, 154, 140, $white);
     #Horizontal lines
    ImageRectangle($im, 0, 21, 154, 38, $white);
    ImageRectangle($im, 0, 55, 154, 72, $white);
    ImageRectangle($im, 0, 89, 154, 106, $white);
    ImageRectangle($im, 0, 106, 154, 123, $white);
     #verticle lines
    ImageRectangle($im, 22, 21, 44, 140, $white);
    ImageRectangle($im, 66, 21, 88, 140, $white);
    ImageRectangle($im, 110, 21, 132, 140, $white);



### Put numbers on the calendar

$today = date("d");
$month = date("m");
$year = date("Y");
$datecode = date("Ymd");
$gif = '.gif';
    $first=mktime(0,0,0,$month,1,$year);

    $mon_yr=date("F Y", $first);

    $wd=date("w",$first);
    #if ($wd==0) { $wd=7;}
    $lastday=date("d",mktime(0,0,0,$month+1,0,$year));
    $cur=-$wd+0;
    $ver_position = 50;
    for ($k=0;$k<6;$k++) {
    $day_position = 5;
         $last_row_used = 0;
      for ($i=0;$i<7;$i++ ) {
          $cur++;
    $sing_add = 0;
          if (($cur<=0) || ($cur>$lastday) ) $day_position = ($day_position + 22);
         else
        {
        $day_color = $grey;
        if ($day_position<10) $day_color = $tan;
        if ($cur==$today) $day_color = $yellow;

        if (strlen($cur)<2) {$sing_add = 4;}
        $fin_position = ($day_position + $sing_add);
        
          ImageTTFText($im, 12, 0, $fin_position, $ver_position, $day_color, "./fonts/arialbd.ttf", "$cur");
        
        $day_position = ($day_position + 22);
        $last_row_used = 1;
        }
          }  
    $day_position = 5;
    if ($last_row_used) $ver_position = ($ver_position + 17);
    }
# month and year (centered in Arial Bold)
$spc = 23;
$st_add = 0;
$st = "$mon_yr";
$st_len = strlen($st);
$st_margin = (14 - $st_len);
if ($st_margin > 0) {$st_add = ($st_margin * 4);}
$spc = ($spc + $st_add);
ImageTTFText($im, 14, 0, $spc, 15, $white, "./fonts/arialbd.ttf", "$st");

# weekday names
ImageString($im, 2, 3, 23, "Sun", $orange);
ImageString($im, 2, 25, 23, "Mon", $orange);
ImageString($im, 2, 47, 23, "Tue", $orange);
ImageString($im, 2, 69, 23, "Wed", $orange);
ImageString($im, 2, 91, 23, "Thu", $orange);
ImageString($im, 2, 113, 23, "Fri", $orange);
ImageString($im, 2, 135, 23, "Sat", $orange);

if ($ver_position<140) # crop the calendar if it doesn't go into last row
    {
    $im_out = ImageCreate(156, 125);
    $out_black = ImageColorAllocate($im_out, 50, 50, 50);
    ImageRectangle($im, 1, 124, 155, 124, $dkgrey);
    ImageCopyResized($im_out, $im, 0, 0, 0, 0, 156, 125, 156, 125);
    ImageColorTransparent($im_out, $out_black);
    ImageGIF($im_out, "./dategif/$datecode$gif");
    ImageGIF($im_out);
    ImageDestroy($im);
    ImageDestroy($im_out);
    }
else
    {
    ImageColorTransparent($im, $black);
    ImageGif($im, "./dategif/$datecode$gif");
    ImageGif($im);
    ImageDestroy($im);
    }

?>

Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.