<?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. Redhat Enterprise Linux 6.4图形界面的中文问题

    一.界面中文,但Windows中的中文文件名上传到linux后乱码. .bashrc文件: export LANG=zh_CN.UTF-8 /etc/sysconfig/i18n文件: LANG=&q ...

  2. MapReduce计算模型

    MapReduce计算模型 MapReduce两个重要角色:JobTracker和TaskTracker. ​ MapReduce Job 每个任务初始化一个Job,没个Job划分为两个阶段:Map和 ...

  3. 怎么创建MongoDB数据库

    MongoDB didn’t provides any command to create “database“. Actually, you don’t need to create it manu ...

  4. HDU 3436--Queue-jumpers (树状数组 or Splay Tree)

    树状数组这个真心想了好久,还是没想出来 %%% www.cppblog.com/Yuan/archive/2010/08/18/123871.html 树状数组求前缀和大于等于k的最大值,第一次看到这 ...

  5. TCP/IP模型的简单解释

    TCP/IP模型是互联网的基础.想要理解互联网,就必须理解这个模型.但是,它不好懂,我就从来没有搞懂过. 前几天,BetterExplained上有一篇文章,很通俗地解释了这个模型.我读后有一种恍然大 ...

  6. [iOS基础控件 - 5.2] 查看大图、缩放图片代码(UIScrollView制作)

    原图: 900 x 1305      拖曳滚动:   缩放:           主要代码: // // ViewController.m // ImageZoom // // Created by ...

  7. [Objective-c 基础 - 3.3] @property属性详解

    ARC     自动引用计数 ARC不是垃圾回收,而是编译器自动插入代码来减少程序员的代码输入和失误.     同时比垃圾和效率要高,因为其不影响运行时间,相当于自己管理内存.     总是通过属性来 ...

  8. C#基础知识之方法重载总结

    1.首先解释一下什么是方法重载?    方法重载是指在同一个类中方法同名,参数不同,调用时根据实参的形式,选择与他匹配的方法执行操作的一种技术. 这里所说的参数不同是指以下几种情况: ①  参数的类型 ...

  9. 统计php源码行

    嘿嘿,最近在提交文件,需要知道代码行数,简单记录下,由几种不同的方法进行: 1.直接在 linux 上运行下面语句即可,秒杀: find . -name "*.php" -exec ...

  10. ThinkPHP3.2.3新特性之:数据库设置

    ThinkPHP3.2.3版本数据库驱动采用PDO完全重写,配置和使用上面也比之前版本更加灵活和强大,我们来了解下如何使用. 首先,3.2.3的数据库配置信息有所调整,完整的数据库设置包括: /* 数 ...