php gd 生成日历图
<?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 生成日历图的更多相关文章
- php中用GD绘制折线图
php中用GD绘制折线图,代码如下: Class Chart{ private $image; // 定义图像 private $title; // 定义标题 private $ydata; // 定 ...
- chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法[bubuko.com]
chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法,原文:http://bubuko.com/infodetail-328671.html 默认情况下如下图 Y轴并不是从0开始 ...
- 添加ModelGoon插件Eclipse自动生成UML图
下载ModelGoonjar包 http://download.csdn.net/detail/u011070297/8366021 下载完该jar之后,直接拷贝到Eclipse安装目录下的dropi ...
- Eclipse自动生成UML图(转载)
*ModelGoon是什么? 它是一个Eclipse插件,用于基于UML图的模型设计,以及逆向工程(即从已有源代码生成类图等,以作为代码分析或者文档使用). *适用条件 ModelGoon目前最新的版 ...
- MySQL数据表生成ER图
遇到没有说明文档的数据库的时候,一张一张表去分析,需要花费很长时间和精力. 幸好有一些工具,可以帮助我们生成ER图,这样看起来就一目了然: 下面我将自己的一次实践记录于下,供参考: 1.下载并安装工具 ...
- 利用powerdesigner反向数据库结构,生成ER图
参考月下狼~图腾~:<利用powerdesigner反向数据库结构,生成ER图> https://www.zybuluo.com/Jpz/note/123582 首先新建一个"P ...
- Yarn中如何生成状态机图
原文 http://xiguada.org/yarn_state_picture/ 在Hadoop2.0系列的版本里,采用了状态机的方式处理ResourceManager,NodeManager,Ma ...
- 将Eclipse中现有的java类生成类图
需求:将Eclipse中现有的java类生成类图 一:什么是ModelGoon? 它是一个Eclipse插件,用于基于UML图的模型设计,以及逆向工程(即从已有源代码生成类图). 二:安装 下载Mod ...
- 用Enterprise Architect从源码自动生成类图
http://blog.csdn.net/zhouyong0/article/details/8281192 /*references:感谢资源分享者.info:简单记录如何通过工具从源码生成类图,便 ...
随机推荐
- NOIP 2014 无线网络发射器选址
水题..直接暴力 #include<cstdio> #include<algorithm> using namespace std; const int inf = 0x3f3 ...
- CUDA学习资料分享(随时更新)
1.Programming_Massively_Parallel_Processors.pdf 2.CUDA_C_Programming_Guide.pdf 3.CUDA范例精解通用GPU编程.pdf ...
- Hadoop,HBase,Zookeeper源码编译并导入eclipse
基本理念:尽可能的参考官方英文文档 Hadoop: http://wiki.apache.org/hadoop/FrontPage HBase: http://hbase.apache.org/b ...
- 问题-Tbutton(sender) 与 (sender as Tbutton) 等价吗?
问题:Tbutton(sender) 与 (sender as Tbutton) 等价吗? 答: 1. Sender As TButton时delphi做类型检查. 比如: var frm:TFo ...
- kvo原理概述
kvo概述 kvo,全称Key-Value Observing,它提供了一种方法,当对象某个属性发生改变时,允许监听该属性值变化的对象可以接受到通知,然后通过kvo的方法响应一些操作. kvo实现原理 ...
- C++学习笔记(八):函数重载、函数指针和函数对象
函数重载 函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数.重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于 ...
- C# & SQLite - Storing Images
Download source code - 755 KB Introduction This article is to demonstrate how to load images into ...
- mysql之数据库备份与恢复
备份与恢复 系统运行中,增量备份与整体备份. 例如:每周日整体备份一次,周一到周六只备份当天. 如果周五的数据出了问题,可以用周日的整体+周一.周二.周三.周四来恢复. 备份的工具: 有第三方的收费备 ...
- ssh免密码登录记录
做mha.hadoop安装过程中都要用ssh免密码登陆,查过一些资料,踩过很多坑,下面用简单记录一下 首先要安装ssh linux : centOS 6.5 yum -y install *ssh* ...
- nonce和timestamp在Http安全协议中的作用
前段时间给客户网站做新浪微博账号登录功能,对OAuth协议以及相关的一些安全协议做了一些研究,顺便就记录一下学习心得吧.在这里就不打算具体讲OAuth的协议流程了,而是针对OAuth请求头里的nonc ...