<?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. Cordova CrossWalk

    http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/cordova-2-cordovabarcodescanner/ 军训结束后,同学们 ...

  2. Java Script after Douglas Crockford's Training (JSON father)

    有幸能参加大牛的培训,学到了很多东西,下面总结一下: 1.总的思想是每一门语言都有好有坏,我们要通过好的代码规范和其他一些方式去避免使用糟糠的那一部分.JS有很多缺点,但是也有很多优点,我们就用他的优 ...

  3. Petshop学习第三天

    ASP.NET缓存 ASP.NET充分利用缓存机制,通过某种方法,将系统需要的数据对象.Web页面存储在内存中,使得Web站点需要这些数据时,不经过繁琐的数据库连接.查询和复杂的逻辑运算,就可以触手可 ...

  4. HDU-4690 EBCDIC 映射,模拟,沙茶

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4690 纯沙茶模拟题... //STATUS:C++_AC_93MS_228KB #include &l ...

  5. keil中的存储模式

    存储模式 存储模式决定了默认的存储器类型此存储器类型将应用于函数参数局部变量和定义时未包含存储器类型的变量你可以在命令行用SMALL COMPACT和LARGE参数定义存储模式,定义变量时使用存储器类 ...

  6. MSSQLSERVER数据库- 数据类型Timestamp

    Timestamp:亦称时间戳数据类型,它提供数据库范围内的惟一值,反应数据库中数据修改的相对顺序,相当于一个单调上升的计数器.当它所定义的列在更新或者插入数据行时,此列的值会被自动更新,一个计数值将 ...

  7. 关于NoSQL数据库你应该知道的10件事

    关系数据库模型已经流行了几十年了,但是一种新类型的数据库——被称为NoSQL,正在引起企业的注意.下面是关于它的优势和劣势的一个概述.二十多年以来,对数据库管理来说,关系数据库(RDBMS)模型一直是 ...

  8. Java Singleton 单例模式

    大家可能还听过 Singleton  也就是单例模式 这个单例模式要求 在程序的运行时候   一个程序的某个类 只允许产生一个 实例 那么 这个类就是一个单例类 Java Singleton模式主要作 ...

  9. 【24】若所有参数皆需类型转换,请为此采用non-members函数

    1.令class支持隐式类型转换,往往是个糟糕的主意.但有些情况是合理的,比如数值类型.考虑,有理数Rational有分子,分母两个字段,缺省参数值为0,1.Ration a = 2;我们期望构造一个 ...

  10. HDU 5112 A Curious Matt 水题

    A Curious Matt Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid ...