<?php

 //如果您提交了时间则显示您提交年月的日历,否则显示当前月份日历
if (isset($_GET['month']) && isset($_GET['year']))
{
$month = $_GET['month'];
$year = $_GET['year'];
}
else
{
$month = date ('m');
$year = date ('Y');
}
$weekid = date ('w',mktime(0,0,0,$month,1,$year));//某年某月第一天是星期几。0-7分别代表星期日-星期六
$countdays = date('t',mktime(0,0,0,$month,1,$year));//某年某个月的天数
//获取上个月的天数
$prevMonth = $month - 1;
$prevYear = $year;
if($prevMonth == 0){
$prevMonth = 12;
$prevYear = $year - 1;
}
$prevMonthDays = date('t',mktime(0,0,0,$prevMonth,1,$prevYear));//某年某个月的上个月的天数
//echo $prevMonthDays."<br/>";
//echo $prevMonth."<br/>";
$countdays = date('t',mktime(0,0,0,$month,1,$year));//某年某个月的天数
$arr_days = array ();//数组$arr_days代表某个月的每一天
//echo $weekid."<br/>";
//echo $countdays."<br/>";
//print_r($arr_days);
$tempweekid = $weekid-1; //用于计算上个月前面的天数
//初始化数组$arr_days
for ($i = 0; $i <= 35; $i++)
{
if($tempweekid >=0){
$arr_days[$i] = $prevMonthDays - $tempweekid;
$tempweekid--;
}else{
$arr_days[$i] = "";
} } //给$arr_days数组赋值
for ($i = $weekid, $j = 1; $j <= $countdays; $i++, $j++)
{
$arr_days[$i] = $j;
} header("Content-type: image/png");
$im = @imagecreate(300, 185)
or die("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($im, 255, 255, 255); // Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
$red = imagecolorallocate($im, 255, 37, 37);
$color2 = imagecolorallocatealpha($im,0,0,0,0); $alphagray = imagecolorallocatealpha($im,205,206,206,0);
$alphared = imagecolorallocatealpha($im,255,206,206,0); $font = './gillsans.ttf';
$text = "SU"; $titleArray = array("SUN","MON","TUE","WED","THU","FRI","SAT");
$font_x = 20;
$font_y = 20;
foreach($titleArray as $key=>$value){
// Add some shadow to the text
imagettftext($im, 12, 0, $font_x, $font_y, $color2, $font, $value);
$font_x +=40;
} $font_x = 20;
$font_y = 45; //表格输出
for ($i = 0; $i <= 35; $i++)
{
$row = $arr_days[$i];
$tempFontx = $font_x;
if($row < 10){
$tempFontx +=5;
} if ($i % 7 == 0)
{ if($i < 7 && $row > 7){
imagettftext($im, 12, 0, $tempFontx, $font_y, $alphared, $font, $row);
}else{
imagettftext($im, 12, 0, $tempFontx, $font_y, $red, $font, $row);
} $font_x +=40;
}else{
if($i < 7 && $row > 7){
imagettftext($im, 12, 0, $tempFontx, $font_y, $alphagray, $font, $row);
}else{
imagettftext($im, 12, 0, $tempFontx, $font_y, $color2, $font, $row);
} $font_x +=40;
} if (($i + 1) % 7 == 0)
{
$font_x = 20;
$font_y += 25;
}
} // Add the text
imagepng($im,"./".$year.$month.".png");
//imagepng($im);
imagedestroy($im);

使用的字体Font: http://pan.baidu.com/s/1jGBzrM2

最终效果:

参考文章:用php实现的一个简单万年历

php gd 生成日历图的更多相关文章

  1. php中用GD绘制折线图

    php中用GD绘制折线图,代码如下: Class Chart{ private $image; // 定义图像 private $title; // 定义标题 private $ydata; // 定 ...

  2. chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法[bubuko.com]

    chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法,原文:http://bubuko.com/infodetail-328671.html 默认情况下如下图 Y轴并不是从0开始 ...

  3. 添加ModelGoon插件Eclipse自动生成UML图

    下载ModelGoonjar包 http://download.csdn.net/detail/u011070297/8366021 下载完该jar之后,直接拷贝到Eclipse安装目录下的dropi ...

  4. Eclipse自动生成UML图(转载)

    *ModelGoon是什么? 它是一个Eclipse插件,用于基于UML图的模型设计,以及逆向工程(即从已有源代码生成类图等,以作为代码分析或者文档使用). *适用条件 ModelGoon目前最新的版 ...

  5. MySQL数据表生成ER图

    遇到没有说明文档的数据库的时候,一张一张表去分析,需要花费很长时间和精力. 幸好有一些工具,可以帮助我们生成ER图,这样看起来就一目了然: 下面我将自己的一次实践记录于下,供参考: 1.下载并安装工具 ...

  6. 利用powerdesigner反向数据库结构,生成ER图

    参考月下狼~图腾~:<利用powerdesigner反向数据库结构,生成ER图> https://www.zybuluo.com/Jpz/note/123582 首先新建一个"P ...

  7. Yarn中如何生成状态机图

    原文 http://xiguada.org/yarn_state_picture/ 在Hadoop2.0系列的版本里,采用了状态机的方式处理ResourceManager,NodeManager,Ma ...

  8. 将Eclipse中现有的java类生成类图

    需求:将Eclipse中现有的java类生成类图 一:什么是ModelGoon? 它是一个Eclipse插件,用于基于UML图的模型设计,以及逆向工程(即从已有源代码生成类图). 二:安装 下载Mod ...

  9. 用Enterprise Architect从源码自动生成类图

    http://blog.csdn.net/zhouyong0/article/details/8281192 /*references:感谢资源分享者.info:简单记录如何通过工具从源码生成类图,便 ...

随机推荐

  1. [原]Java面试题-将字符串中数字提取出来排序后输出

    [Title][原]Java面试题-将字符串中数字提取出来排序后输出 [Date]2013-09-15 [Abstract]很简单的面试题,要求现场在纸上写出来. [Keywords]面试.Java. ...

  2. 2016"百度之星" - 初赛(Astar Round2B) 1006 中位数计数

    思路:统计当前数左边比它小|大 i个人,相应右边就应该是比它大|小i个人 l数组表示左边i个人的方案 r表示右边i个人的方案 数组下标不可能是负数所以要加n //#pragma comment(lin ...

  3. Code First 更新数据库结构(简单实现方法:会删除原来的数据)

    之前在 http://www.cnblogs.com/mmcmmc/p/3833265.html 写到关于“Code First 更新数据库结构”的东西. 可是由于某种原因,新手们会出现各种问题,好了 ...

  4. hdoj 1262 寻找素数对

    寻找素数对 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  5. SQL Server 2008数据库创建,备份,还原图解及注意点

    一.新建数据库 步骤1:点击“新建数据库”. 步骤2:输入数据库名称,设置数据库文件保存位置(注意点:最好自己设置数据库文件保存位置,不要采用安装时默认的文件保存位置!),点击“确认”即可完成新库的创 ...

  6. UVA 10806 Dijkstra, Dijkstra.(费用流)

    n个点的无向带权图,求1->n的最短往返路径,不走重复边. 这里涉及到一个知识点:求无向图上s->t的最短路,其实就是费用流. 而求1->n最短往返路径呢?增加源点s,由s到1加弧, ...

  7. 5-17 Hashing (25分)

    The task of this problem is simple: insert a sequence of distinct positive integers into a hash tabl ...

  8. linux下配置squid http proxy过程

      国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国 ...

  9. 给postfix设置黑名单

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  10. svn项目导入

    svn项目导入 在已建立好svnserverserver的情况下.且所用电脑上已装好svn,在电脑上导入svn项目 首先,新建目录.点击鼠标右键,选择TortoiseSVN–>export 然后 ...